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

Merge remote-tracking branch 'origin/develop' into order

card007 5 лет назад
Родитель
Сommit
b071db5d73
53 измененных файлов с 1847 добавлено и 734 удалено
  1. 2 2
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  2. 5 0
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  3. 3 3
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  4. 32 3
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  5. 51 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  6. 9 2
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  7. 12 9
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  8. 1 0
      src/main/java/com/style24/persistence/domain/GoodsStock.java
  9. 36 0
      src/main/java/com/style24/persistence/domain/GoodsVideo.java
  10. 6 0
      src/main/java/com/style24/persistence/domain/Review.java
  11. 0 27
      src/main/java/com/style24/persistence/domain/VideoDisploc.java
  12. 6 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  13. 14 7
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  14. 27 13
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  15. 10 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  16. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  17. 1 1
      src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html
  18. 0 42
      src/main/webapp/WEB-INF/views/mob/common/fragments/VariablesMob.html
  19. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/CallcenterLayoutMob.html
  20. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/DefaultLayoutMob.html
  21. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html
  22. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/LoginLayoutMob.html
  23. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/MypageLayoutMob.html
  24. 1 1
      src/main/webapp/WEB-INF/views/mob/common/layout/SubLayoutMob.html
  25. 102 0
      src/main/webapp/WEB-INF/views/mob/customer/CertificationFormMob.html
  26. 13 7
      src/main/webapp/WEB-INF/views/mob/customer/IdFindFormMob.html
  27. 80 0
      src/main/webapp/WEB-INF/views/mob/customer/PasswordCampaignFormMob.html
  28. 12 12
      src/main/webapp/WEB-INF/views/mob/customer/PasswordChangeFormMob.html
  29. 13 7
      src/main/webapp/WEB-INF/views/mob/customer/PasswordFindFormMob.html
  30. 213 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html
  31. 3 130
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  32. 160 0
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealFormMob.html
  33. 31 12
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  34. 86 47
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  35. 8 7
      src/main/webapp/WEB-INF/views/mob/mypage/MypagePointFormMob.html
  36. 1 0
      src/main/webapp/WEB-INF/views/web/common/fragments/VariablesWeb.html
  37. 106 0
      src/main/webapp/WEB-INF/views/web/customer/NonCustOrderConfirmFormWeb.html
  38. 17 20
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  39. 3 3
      src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html
  40. 29 47
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  41. 228 0
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  42. 16 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  43. 84 23
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  44. 4 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  45. 7 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaDetailFormWeb.html
  46. 24 8
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  47. 38 39
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  48. 6 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  49. 3 6
      src/main/webapp/biz/goods.js
  50. 153 120
      src/main/webapp/ux/mo/css/layout_m.css
  51. 122 106
      src/main/webapp/ux/mo/css/style24_m.css
  52. 44 7
      src/main/webapp/ux/plugins/gaga/gaga.summernote.js
  53. 19 0
      src/main/webapp/ux/style24_link.js

+ 2 - 2
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -14,13 +14,13 @@ import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsStock;
+import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.GoodsViewHst;
 import com.style24.persistence.domain.Measurement;
 import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.Tmtb;
-import com.style24.persistence.domain.VideoDisploc;
 
 /**
  * 상품 Dao
@@ -69,7 +69,7 @@ public interface TsfGoodsDao {
 	 * @author eskim
 	 * @date 2021. 2. 9
 	 */
-	Collection<VideoDisploc> getVideoList(String goodsCd);
+	Collection<GoodsVideo> getVideoList(GoodsVideo goodsVideo);
 
 	/**
 	 * 상품 정보 조회

+ 5 - 0
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -529,6 +529,11 @@ public class TsfCouponService {
 	 */
 	@Transactional("shopTxnManager")
 	public int downloadCustGradeCoupon(Integer custNo) {
+
+		if (custNo == null || custNo == 0) {
+			throw new IllegalStateException("고객정보가 없습니다. 다시 로그인 하시기 바랍니다.");
+		}
+
 		// 1. 고객정보 조회
 		Customer custInfo = customerService.getCustomerFindByCustNo(custNo);
 

+ 3 - 3
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -24,13 +24,13 @@ import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsStock;
+import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.GoodsViewHst;
 import com.style24.persistence.domain.Measurement;
 import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.Tmtb;
-import com.style24.persistence.domain.VideoDisploc;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -208,8 +208,8 @@ public class TsfGoodsService {
 	 * @author eskim
 	 * @since 2021. 2. 9
 	 */
-	public Collection<VideoDisploc> getVideoList(String goodsCd) {
-		return goodsDao.getVideoList(goodsCd);
+	public Collection<GoodsVideo> getVideoList(GoodsVideo goodsVideo) {
+		return goodsDao.getVideoList(goodsVideo);
 	}
 
 	/**

+ 32 - 3
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -717,12 +717,26 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @author jsshin
 	 * @since 2021. 03. 10
 	 */
-	@GetMapping("/certification/form")
-	public ModelAndView getCertificationForm() {
+	@RequestMapping("/certification/form")
+	public ModelAndView getCertificationForm(@RequestParam(value = "sEncData", required = false) String sEncData
+			, @RequestParam(value = "authMethod", required = false) String authMethod
+			, @RequestParam(value = "custParams", required = false) String custParams) {
+
 		ModelAndView mav = new ModelAndView();
 
-		mav.setViewName(super.getDeviceViewName("customer/CertificationForm"));
+		if (StringUtils.isNotBlank(custParams)) {
+			TsfSession.setAttribute("custNo", custParams);
+		}
+
+		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
+			mav.addObject("custNo", TsfSession.getAttribute("custNo"));
+		}
+
+		mav.addObject("sEncData", sEncData);
+		mav.addObject("authMethod", authMethod);
+
 
+		mav.setViewName(super.getDeviceViewName("customer/CertificationForm"));
 		return mav;
 	}
 
@@ -911,4 +925,19 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 비회원주문확인 화면
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 04. 20
+	 */
+	@GetMapping("/noncust/order/confirm/form")
+	public ModelAndView getNonCustOrderConfirmForm() {
+		ModelAndView mav = new ModelAndView();
+		mav.setViewName(super.getDeviceViewName("customer/NonCustOrderConfirmForm"));
+		return mav;
+	}
+
+
 }

+ 51 - 0
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -711,4 +711,55 @@ public class TsfDisplayController extends TsfBaseController {
 		return goodsList;
 	}
 
+	/**
+	 * 아울렛 메인
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 20
+	 */
+	@GetMapping("/outlet/main/form")
+	public ModelAndView outletMain(Cate4Srch cate) {
+		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/OutletMainForm"));
+
+		MainLayout mainLayout = new MainLayout();
+		mainLayout.setCateNo(cate.getCate1No());
+		Collection<MainLayout> mainLayoutCollection = displayService.getMainLayout(mainLayout);
+		Collection<MainLayout> outletMainLayoutList = new ArrayList<MainLayout>();
+
+		for (MainLayout cateMain : mainLayoutCollection) {
+			if ("SOM001".equals(cateMain.getContentsLoc())) {
+				// 기획전
+				Contents contents = new Contents();
+				contents.setContentsLoc("SOM001");
+				contents.setCateNo(cate.getCate1No());
+				mav.addObject("planningList", displayService.getContentsList(contents));
+			} else if ("SOM002".equals(cateMain.getContentsLoc())) {
+				// md추천
+				cate.setContentsLoc("SOM002");
+				cate.setMaxRow(20);
+				cate.setCate1No(3000);
+				mav.addObject("mdPickGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+			} else if ("SOM003".equals(cateMain.getContentsLoc())) {
+				// 베스트품
+				cate.setContentsLoc("SOM003");
+				cate.setMaxRow(20);
+				cate.setCate1No(3000);
+				mav.addObject("bestGoodsList", goodsService.getContentsCategoryGoodsList(cate));
+			}
+
+			outletMainLayoutList.add(cateMain);
+		}
+
+		mav.addObject("outletMainLayoutList", outletMainLayoutList);
+		mav.addObject("preview", cate.getPreview());
+		mav.addObject("viewDt", cate.getViewDt());
+		mav.addObject("viewPage", "G037_30");
+		mav.addObject("popupCateNo", cate.getCate1No());
+
+		mav.addObject("params", cate);
+
+		return mav;
+	}
+
 }

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

@@ -38,6 +38,7 @@ import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
+import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.Lookbook;
 import com.style24.persistence.domain.Measurement;
 import com.style24.persistence.domain.ReinboundInform;
@@ -167,7 +168,10 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 이미지정보
 		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods));
 		// 상품 동영상정보
-		mav.addObject("goodsVideoList", goodsService.getVideoList(paramsGoods.getGoodsCd()));
+		GoodsVideo goodsVideo = new GoodsVideo();
+		goodsVideo.setGoodsCd(paramsGoods.getGoodsCd());
+		goodsVideo.setMaxRownum(1);
+		mav.addObject("goodsVideoList", goodsService.getVideoList(goodsVideo));
 		// 상품 공지
 		mav.addObject("goodsNoticeList", goodsService.getGoodsNoticeList(paramsGoods));
 
@@ -1124,7 +1128,10 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 이미지정보
 		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods));
 		// 상품 동영상정보
-		mav.addObject("goodsVideoList", goodsService.getVideoList(paramsGoods.getGoodsCd()));
+		GoodsVideo goodsVideo = new GoodsVideo();
+		goodsVideo.setGoodsCd(paramsGoods.getGoodsCd());
+		goodsVideo.setMaxRownum(1);
+		mav.addObject("goodsVideoList", goodsService.getVideoList(goodsVideo));
 		// 상품 공지
 		mav.addObject("goodsNoticeList", goodsService.getGoodsNoticeList(paramsGoods));
 		// 상품 고시정보

+ 12 - 9
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -503,16 +503,19 @@ public class TsfPlanningController extends TsfBaseController {
 	public ModelAndView planningShotDeliveryForm(Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
 		CustDeliveryAddr addr = new CustDeliveryAddr();
-		int custNo = TsfSession.getInfo().getCustNo();
-		// 고객정보 조회
-		Customer customer = new Customer();
-		customer.setSiteCd(TscConstants.Site.STYLE24.value());
-		customer.setCustNo(custNo);
-		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
-		customer = coreCustomerService.getCustomerInfo(customer);
-
-		mav.addObject("customerInfo", customer);
+		Integer custNo = null;
+		if (TsfSession.isLogin()) {
+			custNo = TsfSession.getInfo().getCustNo();
+			// 고객정보 조회
+			Customer customer = new Customer();
+			customer.setSiteCd(TscConstants.Site.STYLE24.value());
+			customer.setCustNo(custNo);
+			customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+			customer = coreCustomerService.getCustomerInfo(customer);
+			mav.addObject("customerInfo", customer);
+		}
 		
+
 		addr.setCustNo(custNo);
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());

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

@@ -38,6 +38,7 @@ public class GoodsStock extends TscBaseDomain {
 	private int minOrdQty;
 	private int maxOrdQty;
 	private int currPrice;
+	private String optCd1Nm;		// 옵션1칼라명(입점은 옵션명)
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsOption;				

+ 36 - 0
src/main/java/com/style24/persistence/domain/GoodsVideo.java

@@ -0,0 +1,36 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+
+/**
+ * 상품 동영상 Domain
+ *
+ * @author eskim
+ * @since 2020. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsVideo extends TscBaseDomain {
+
+	private Integer videoSq;
+	private String goodsCd;
+	private String videoGb;	// 비디오 구분 M: mp4, Y:유투브
+	private String kmcKey;	// 
+	private String kufKey;
+	private String dispYn;
+	
+	private int maxRownum;
+	
+//	private String brandEnm; // 브랜드영문명
+//	private String goodsNm;
+//	private String goodsNum;
+//	private String supplyGoodsCd;
+//	private String excelFileNm;
+//	private String stDate;
+//	private String edDate;
+	
+
+}

+ 6 - 0
src/main/java/com/style24/persistence/domain/Review.java

@@ -100,6 +100,12 @@ public class Review extends TscBaseDomain {
 	private String itemNm;
 	private String colorNm;	
 	
+	
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] orgFileNmArr;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] sysFileNmArr;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] itemNmArr;		// 옵션코드
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)

+ 0 - 27
src/main/java/com/style24/persistence/domain/VideoDisploc.java

@@ -1,27 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * 동영상 Domain
- *
- * @author eskim
- * @since 2021. 2. 9
- */
-@SuppressWarnings("serial")
-@Data
-public class VideoDisploc extends TscBaseDomain {
-
-	private int videoSq;
-	private String videoGb;
-	private String videoVal;
-
-	private String displocGb;
-	private String displocVal;
-	private String delYn;
-
-	private String imgType;
-	private String imgPath1;
-}

+ 6 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -176,6 +176,7 @@
 		ON    CGP.GRADE_CPN_ID1 = CP.CPN_ID
 		WHERE CGP.GRADE_CD = #{custGrade}
 		AND   CP.SITE_CD = #{siteCd}
+		AND   CP.CPN_STAT = 'G232_11'
 	</select>
 	
 	<!--상품 쿠폰 조회-->
@@ -1065,6 +1066,7 @@
 		     , DATE_FORMAT(CONCAT(LAST_DAY(NOW()), ' 23:59:59'), '%Y%m%d%H%i%S')               AS AVAIL_EDDT
 		FROM  TB_COUPON CP
 		WHERE CP.CPN_ID = #{cpnId}
+		AND   CP.CPN_STAT = 'G232_11'
 		AND   NOT EXISTS (
 		                  SELECT 1
 		                  FROM   TB_CUST_COUPON CC
@@ -1080,8 +1082,8 @@
 		SELECT CP.CPN_ID
 		     , CP.END_ALIM_YN
 		     , CASE WHEN CP.DC_WAY = 'G240_10' THEN '원'
-            		ELSE '%'
-                                                         END             AS DC_WAY    /*할인방법*/
+		            ELSE '%'
+		       END                                      AS DC_WAY    /*할인방법*/
 		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
 		            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
 		            WHEN #{frontGb} = 'A' THEN CP.DC_AVAL
@@ -1092,7 +1094,8 @@
 		            ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%m%d%H%i%S')             END AS AVAIL_EDDT
 		FROM  TB_COUPON CP
 		WHERE CP.CPN_ID = #{cpnId}
-		AND   CP.SITE_CD = #{siteCd}	
+		AND   CP.SITE_CD = #{siteCd}
+		AND   CP.CPN_STAT = 'G232_11'
 	</select>
 
 </mapper>

+ 14 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -724,13 +724,20 @@
 		</if>
 		<if test='colorSearch != null and colorSearch.length > 0'>
 		     AND G.MAIN_COLOR_CD IN (
-		          SELECT OPT_CD1
-		          FROM TB_OPTION
-		          WHERE GOODS_CD = G.GOODS_CD
-		          AND  OPT_CD1 IN
-		     <foreach collection="colorSearch" item="item" index="index"  open="(" close=")" separator=",">
-		     	#{item}
-		     </foreach>
+		             SELECT O.OPT_CD1
+		             FROM TB_OPTION O
+		             WHERE	1=1
+		             AND	O.OPT_CD1 IN (
+		                    SELECT	CD
+		                    FROM	TB_COMMON_CODE
+		                    WHERE	1=1
+		                    AND		CD_GB = 'G072'
+		                    AND		CD_DESC IN
+		                    <foreach collection="colorSearch" item="item" index="index"  open="(" close=")" separator=",">
+		                         #{item}
+		                    </foreach>
+		             )
+		             AND O.GOODS_CD = G.GOODS_CD
 		     )
 		</if>
 	</sql>

+ 27 - 13
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -244,8 +244,15 @@
 	<!-- 상품 옵션1 목록 - 자사용 -->
 	<select id="getGoodsOption1List" parameterType="Goods" resultType="GoodsStock">
 		/* TsfGoods.getGoodsOption1List */
-		SELECT A.*
-		    , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = A.GOODS_CD AND COLOR_CD = IF(A.SELF_GOODS_YN ='Y', A.OPT_CD1, 'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
+		SELECT A.GOODS_CD
+		     , A.SELF_GOODS_YN
+		     , A.MIN_ORD_QTY
+		     , A.MAX_ORD_QTY
+		     , A.GOODS_STAT
+		     , A.STOCK_QTY
+		     , A.OPT_CD1
+		     , IFNULL(C.COLOR_KNM, A.OPT_CD1) AS OPT_CD1_NM
+		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = A.GOODS_CD AND COLOR_CD = IF(A.SELF_GOODS_YN ='Y', A.OPT_CD1, 'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		FROM (
 		      SELECT G.GOODS_CD
 		           , G.SELF_GOODS_YN
@@ -267,11 +274,13 @@
 		      AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT           /*판매기간 확인*/
 		      GROUP BY G.GOODS_CD , G.SELF_GOODS_YN , G.MIN_ORD_QTY, G.MAX_ORD_QTY, O.OPT_CD1
 		) A
+		LEFT OUTER JOIN TB_COLOR C ON A.OPT_CD1 = C.COLOR_CD
+		                           AND C.USE_YN = 'Y'
 		WHERE 1 = 1
 		<if test='optionSoldoutSkip != null and optionSoldoutSkip == "Y" '>
-		AND STOCK_QTY > 0
+		AND A.STOCK_QTY > 0
 		</if>
-		ORDER BY GOODS_CD, OPT_CD1
+		ORDER BY A.GOODS_CD, NULLIF(C.COLOR_KNM, A.OPT_CD1)
 	</select>
 		
 	<!-- 상품 옵션2 목록  - 자사용-->
@@ -302,6 +311,7 @@
 		SELECT GOODS_CD
 		     , OPT_CD
 		     , OPT_CD1
+		     , IFNULL(C.COLOR_KNM, B.OPT_CD1) AS OPT_CD1_NM
 		     , OPT_CD2
 		     , ADD_PRICE 
 		     , (CASE WHEN STOCK_QTY - MIN_ORD_QTY >= 0 THEN STOCK_QTY
@@ -333,6 +343,8 @@
 		      AND G.GOODS_TYPE = 'G056_N' -- 일반상품
 		      AND NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT           /*판매기간 확인*/
 		     ) B
+		LEFT OUTER JOIN TB_COLOR C ON B.OPT_CD1 = C.COLOR_CD
+		                           AND C.USE_YN = 'Y'
 		WHERE 1 = 1
 		<if test='optionSoldoutSkip != null and optionSoldoutSkip == "Y" '>
 		AND STOCK_QTY > 0
@@ -378,19 +390,21 @@
 	</select>
 	
 	<!-- 상품 동영상정보 -->
-	<select id="getVideoList" parameterType="String" resultType="VideoDisploc">
+	<select id="getVideoList" parameterType="GoodsVideo" resultType="GoodsVideo">
 		/* TsfGoods.getVideoList */
 		SELECT A.VIDEO_SQ
-		     , A.DISPLOC_VAL
-		     , B.VIDEO_GB
-		     , B.VIDEO_VAL
-		FROM TB_VIDEO_DISPLOC A
-		INNER JOIN TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ
-		                      AND B.DISP_YN = 'Y'
-		WHERE A.DISPLOC_GB = 'G'
-		AND A.DISPLOC_VAL = #{goodsCd}
+		     , A.GOODS_CD
+		     , A.VIDEO_GB
+		     , A.KMC_KEY
+		     , A.KUF_KEY
+		     , A.DISP_YN
+		FROM TB_GOODS_VIDEO A
+		WHERE A.GOODS_CD = #{goodsCd} 
 		AND A.DISP_YN = 'Y'
 		ORDER BY A.VIDEO_SQ DESC
+		<if test="maxRownum != null and maxRownum > 0">
+		LIMIT #{maxRownum}
+		</if>
 	</select>
 	
 	<!-- 상품 고시정보 목록 -->

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

@@ -17,7 +17,15 @@
 	<!-- 기획전 카테고리 목록 -->
 	<select id="getPlanningCategoryList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanningCategoryList */
-		SELECT PL.CATE_NO             /*카테고리번호*/
+		SELECT C.CATE1_NO AS CATE_NO            /*카테고리번호*/
+		     , C.CATE1_NM AS CATE_NM /*카테고리명*/
+		FROM TB_CATE1 C
+		WHERE 1=1
+		AND    C.SITE_CD = #{siteCd}
+		AND    C.CATE_GB = 'G032_101' /*BYITEM*/
+		AND    C.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		AND    C.DISP_YN = 'Y' /*전시하는 카테고리*/
+<!-- 		SELECT PL.CATE_NO             /*카테고리번호*/
 		     , C1.CATE1_NM AS CATE_NM /*카테고리명*/
 		FROM   TB_PLAN P
 		     , TB_PLAN_CATE PL
@@ -37,7 +45,7 @@
 		AND    C1.CATE_GB = 'G032_101' /*BYITEM*/
 		AND    C1.CATE_TYPE = 'G031_10' /*상품카테고리*/
 		AND    C1.DISP_YN = 'Y' /*전시하는 카테고리*/
-		ORDER  BY C1.DISP_ORD
+		ORDER  BY C1.DISP_ORD -->
 	</select>
 	
 	<select id="getPlanAllCount" resultType="int" parameterType="Plan">

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

@@ -1007,7 +1007,7 @@
 		SET R.DEL_YN = 'Y'
 		WHERE 1=1
  		AND R.REVIEW_SQ = #{reviewSq}
- 		AND R.ADM_RPL IS NULL
+ 		-- AND R.ADM_RPL IS NULL
  		AND R.CUST_NO = #{custNo}
 	</update>
 	

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html

@@ -15,7 +15,7 @@
  *******************************************************************************
  -->
 <head th:replace="~{mob/common/fragments/HeadMob :: head}"></head>
-<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 <th:block th:replace="~{mob/common/fragments/ScriptsMob :: scripts}"></th:block>
 <body>
 

+ 0 - 42
src/main/webapp/WEB-INF/views/mob/common/fragments/VariablesMob.html

@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : VariablesMob.html
- * @desc    : Global variables 설정
- *            prefix를 _(underbar)로 시작한다.
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.03.09   gagamel     최초 작성
- *******************************************************************************
- -->
-<th:block th:fragment="variables">
-<script th:inline="javascript">
-/*<![CDATA[*/
-var _frontUrl = [[${@environment.getProperty('domain.front')}]];
-var _uximgUrl = [[${@environment.getProperty('domain.uximage')}]];
-var _imgUrl = [[${@environment.getProperty('domain.image')}]];
-var _uploadDefaultUrl = [[${@environment.getProperty('upload.default.view')}]];
-var _uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
-var _uploadImageUrl = [[${@environment.getProperty('upload.image.view')}]];
-var _frontGb = [[${frontGb}]];
-
-var _today = [[${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}]];
-var _realtime = [[${#calendars.format(#calendars.createNow(), 'HHmmss')}]];
-var _thisYear = [[${#calendars.format(#calendars.createNow(), 'yyyy')}]];
-
-// App Info.
-var _osType = [[${osType}]];
-var _isApp = [[${isApp}]];
-var _appName = [[${appName}]];
-var _appVersion = [[${appVersion}]];
-/*]]>*/
-</script>
-</th:block>
-
-</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/common/layout/CallcenterLayoutMob.html

@@ -7,7 +7,7 @@
 
 <body>
 
-	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 	
 	<div class="app">
 		<!-- GNB -->

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/common/layout/DefaultLayoutMob.html

@@ -7,7 +7,7 @@
 
 <body>
 
-	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 	
 	<div class="app">
 		<!-- GNB -->

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/common/layout/GoodsLayoutMob.html

@@ -7,7 +7,7 @@
 
 <body>
 
-	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 	
 	<div class="app">
 		<!-- GNB -->

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/common/layout/LoginLayoutMob.html

@@ -7,7 +7,7 @@
 
 <body>
 
-	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 	
 	<div class="app">
 		<!-- CONTENT AREA -->

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/common/layout/MypageLayoutMob.html

@@ -7,7 +7,7 @@
 
 <body>
 
-	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 	
 	<div class="app">
 		<!-- GNB -->

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/common/layout/SubLayoutMob.html

@@ -2,7 +2,7 @@
 <html lang="ko" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
 <head th:replace="~{mob/common/fragments/HeadMob :: head}"></head>
 <body>
-	<th:block th:replace="~{mob/common/fragments/VariablesMob :: variables}"></th:block>
+	<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
 	<th:block th:replace="~{mob/common/fragments/ScriptsMob :: scripts}"></th:block>
 	<div class="app">
 		<!-- GNB -->

+ 102 - 0
src/main/webapp/WEB-INF/views/mob/customer/CertificationFormMob.html

@@ -0,0 +1,102 @@
+<!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/LoginLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : CertificationFormMob.html
+ * @desc    : 본인인증 확인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   jsshin     최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+	<main class="container mb">
+		<!-- ★ 컨텐츠 시작 -->
+		<section class="content authentic">
+			<div class="inner">
+				<div class="close">
+					<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+				</div>
+			</div>
+			<div class="inner">
+				<h2 class="title">본인 인증 확인</h2>
+			</div>
+			<div class="inner">
+				<form class="form_wrap" role="form">
+					<!-- 휴대폰,아이핀 본인인증으로 아이디찾기 실패일경우 -->
+					<div class="find_result clear">
+						<div class="form_info">
+							<p>
+								본인 인증 후에 STYLE24의 다양한 서비스를<br>
+								이용하실 수 있습니다.
+							</p>
+						</div>
+						<div class="btn_group_flex">
+							<div>
+								<button type="button" id="btnCellPhoneCertify" class="btn btn_primary btn_block" >
+									<span>휴대폰 본인인증</span>
+								</button>
+							</div>
+						</div>
+					</div>
+					<!-- //휴대폰,아이핀 본인인증으로 아이디찾기 실패일경우 -->
+				</form>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 종료 -->
+	</main>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	const sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+
+	// 나이스 본인인증 후 콜백
+	var fnNiceCallBack = function(encData) {
+		if (!gagajf.isNull(encData)) {
+			let custInfo = {};
+			custInfo.encData = encData;
+			let jsonData = JSON.stringify(custInfo);
+			gagajf.ajaxJsonSubmit('/customer/certification/save', jsonData, fnCertificationCallback);
+		}
+	};
+
+	var fnCertificationCallback = function (result) {
+		if (result.isSuccess) { //인증 성공시 다시 로그인 페이지
+			mcxDialog.alertC("본인인증 완료 되었습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					cfnGoToPage(_PAGE_MAIN);
+				}
+			});
+			return;
+		} else { // 이미 가입된 이력이 있는 경우 완료 페이지
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
+		}
+	}
+
+	// 본인인증
+	$('#btnCellPhoneCertify').on('click', function () {
+		cfnOpenCellphoneCertify(_PAGE_CUSTOMER_CERTIFICATION, [[${custNo}]])
+	});
+
+	$(document).ready(function () {
+		if (!gagajf.isNull(sEncData)) {
+			fnNiceCallBack(sEncData, authMethod);
+		}
+	});
+
+/*]]>*/
+</script>
+</th:block>
+</body>
+</html>

+ 13 - 7
src/main/webapp/WEB-INF/views/mob/customer/IdFindFormMob.html

@@ -71,8 +71,10 @@
 										<div class="form_field">
 											<input type="text" name="email" placeholder="이메일" id="email" class="form_control"/>
 										</div>
-										<div class="ui_row mt20">
-											<button type="button" id="btnInfoConfirm" class="btn btn_dark">확인</button>
+										<div class="btn_group_flex">
+											<div>
+												<button type="button" id="btnInfoConfirm" class="btn btn_dark">확인</button>
+											</div>
 										</div>
 									</div>
 								</form>
@@ -84,11 +86,13 @@
 												회원님의 명의로 등록된 휴대폰으로<br>
 												본인확인을 진행합니다.
 										</div>
-											<div class="ui_row mt20">
+										<div class="btn_group_flex">
+											<div>
 												<button type="button" id="btnCellPhoneCertify" class="btn btn_dark">
 													본인명의 휴대폰으로 인증
 												</button>
 											</div>
+										</div>
 									</div>
 								</div>
 							</div>
@@ -98,10 +102,12 @@
 										<div class="txt">
 											아이핀 인증을 통해 찾을 수 있습니다.
 										</div>
-										<div class="ui_row mt20">
-											<button type="button" id="btnIpinCertify" class="btn btn_dark">
-												아이핀 인증
-											</button>
+										<div class="btn_group_flex">
+											<div>
+												<button type="button" id="btnIpinCertify" class="btn btn_dark">
+													아이핀 인증
+												</button>
+											</div>
 										</div>
 									</div>
 								</div>

+ 80 - 0
src/main/webapp/WEB-INF/views/mob/customer/PasswordCampaignFormMob.html

@@ -0,0 +1,80 @@
+<!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/LoginLayoutMob">
+
+<!--
+ *******************************************************************************
+ * @source  : PasswordCampaignFormWeb.html
+ * @desc    : 비밀번호 캠페인 화면 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.11   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main class="container mb">
+	<!-- ★ 컨텐츠 시작 -->
+	<section class="content campaign">
+		<div class="inner">
+			<div class="close">
+				<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+			</div>
+		</div>
+		<div class="inner">
+			<h2 class="title">비밀번호 변경 캠페인</h2>
+		</div>
+		<div class="inner">
+			<form class="form_wrap" role="form">
+				<div class="form_info">
+					<p>고객님&nbsp;<span class="c_primary">비밀번호 변경</span>으로<br>소중한 개인정보를 지켜주세요!</p>
+					<p class="t_info">고객님은 3개월동안 비밀번호를 변경하지 않으셨습니다.</p>
+				</div>
+				<div class="info_txt">
+					<ul>
+						<li>장기간 비밀번호를 변경하지 않고 동일한 비밀번호를 사용중인 경우, 개인정보를 안전하게 보호하고, 개인정보 도용으로 인한 피해를 방지하기 위해 주기적으로 비밀번호를 변경하도록 안내해드리고 있습니다.</li>
+						<li>고객님의 소중한 정보 보호를 위해 적극적인 참여 부탁 드립니다.</li>
+					</ul>
+				</div>
+				<div class="btn_group_flex">
+					<div>
+						<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_CHANGE_TEMP);">
+							<span>변경하기</span>
+						</button>
+					</div>
+					<div>
+						<button type="button" id="btnPwdNext" class="btn btn_default btn_block">
+							<span>30일간 보지않기</span>
+						</button>
+					</div>
+				</div>
+			</form>
+		</div>
+	</section>
+	<!-- ★ 컨텐츠 종료 -->
+</main>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	// 30일간 보지 않기
+	$('#btnPwdNext').on('click', function () {
+		let jsonData = JSON.stringify({});
+		gagajf.ajaxJsonSubmit('/customer/password/date/update', jsonData, fnPwdDateUpdateCallback);
+	});
+
+	var fnPwdDateUpdateCallback = function (result) {
+		cfnGoToPage(_PAGE_MAIN);
+	}
+
+/*]]>*/
+</script>
+</th:block>
+</body>
+</html>

+ 12 - 12
src/main/webapp/WEB-INF/views/mob/customer/PasswordChangeFormMob.html

@@ -96,9 +96,9 @@
 								<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
 							</div>
 						</div>
-						<div class="btn_group_block btn_group_md ui_row">
-							<div class="ui_col_12">
-								<button type="button" id="btnSavePassword" class="btn btn_dark" disabled="disabled">
+						<div class="btn_group_flex">
+							<div>
+								<button type="button" id="btnSavePassword" class="btn btn_dark btn_block" disabled="disabled">
 									<span th:if="${pageGb == 'find'}">변경 후 다시 로그인</span>
 									<span th:if="${pageGb == 'temp'}">변경하기</span>
 								</button>
@@ -235,16 +235,16 @@
 
 	var fnSavePasswordCallback = function (result) {
 		if (result.isSuccess) {
-		mcxDialog.alertC('비밀번호 변경이 완료 되었습니다.', {
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				if (pageGb === 'find') {
-					cfnGoToPage(_PAGE_LOGIN);
-				} else if (pageGb === 'temp') {
-					cfnGoToPage(_PAGE_MAIN);
+			mcxDialog.alertC('비밀번호 변경이 완료 되었습니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					if (pageGb === 'find') {
+						cfnGoToPage(_PAGE_LOGIN);
+					} else if (pageGb === 'temp') {
+						cfnGoToPage(_PAGE_MAIN);
+					}
 				}
-			}
-		});
+			});
 		} else {
 			mcxDialog.alert('비밀번호 변경이 실패 되었습니다.')
 		}

+ 13 - 7
src/main/webapp/WEB-INF/views/mob/customer/PasswordFindFormMob.html

@@ -67,9 +67,11 @@
                                         <div class="form_field">
                                             <input type="text" name="email" placeholder="이메일" id="email" class="form_control" maxlength="30"/>
                                         </div>
-                                        <div class="ui_row mt20">
-                                            <button type="button" id="btnInfoConfirm" class="btn btn_dark">확인</button>
-                                        </div>
+                                            <div class="btn_group_flex">
+                                                <div>
+                                                    <button type="button" id="btnInfoConfirm" class="btn btn_dark">확인</button>
+                                                </div>
+                                            </div>
                                     </div>
                                 </form>
                             </div>
@@ -80,8 +82,10 @@
                                             회원님의 명의로 등록된 휴대폰으로<br>
                                             본인확인을 진행합니다.
                                         </div>
-                                        <div class="ui_row mt20">
-                                            <button type="button" id="btnCellPhoneCertify" class="btn btn_dark">본인명의 휴대폰으로 인증</button>
+                                        <div class="btn_group_flex">
+                                            <div>
+                                                <button type="button" id="btnCellPhoneCertify" class="btn btn_dark">본인명의 휴대폰으로 인증</button>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
@@ -92,8 +96,10 @@
                                         <div class="txt">
                                             아이핀 인증을 통해 찾을 수 있습니다.
                                         </div>
-                                        <div class="ui_row mt20">
-                                            <button type="button" id="btnIpinCertify" class="btn btn_dark">아이핀 인증</button>
+                                        <div class="btn_group_flex">
+                                            <div>
+                                                <button type="button" id="btnIpinCertify" class="btn btn_dark">아이핀 인증</button>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>

+ 213 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html

@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsDetailDescFormMob.html
+ * @desc	: 딜 구상상품상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR		 DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   eskim	   최초 작성
+ *******************************************************************************
+ -->
+ <div class="content pd_descrp" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
+	<div class="cont_head">
+		<h3 class="sr-only">상품상세정보</h3>
+	</div>
+	<div class="cont_body on">
+		<!-- 상품설명 노출 -->
+		<div class="descrp_box">
+			<div class="desc_simple"> <!-- 상품 간략설명-->
+				<span class="tit_desc" th:if="${goodsInfo.goodsTitle  != null  and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
+				<p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
+					슬림핏에 사이드 밴딩으로 편안함을 더해준 슬랙스입니다. 
+				</p>
+			</div>
+			<div class="desc_character" th:if="${goodsInfo.goodsSpecialDesc != null  and !goodsInfo.goodsSpecialDesc.empty}"> <!-- 상품특징 -->
+				<span class="tit_desc">상품특징</span>
+				<p class="ptxt01" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsSpecialDesc))}">
+					- 지퍼플러 장식을 더해 완성도를 높여줌
+				</p>
+			</div>
+		</div>
+		<!-- //상품설명 노출 -->
+		<!-- 관리자 에디터입력 내용 노출 -->
+			<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
+		<div class="mdhtml_box" th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></div>
+			</th:block>
+		<!-- //관리자 에디터입력 내용 노출 -->
+		<!-- 관리자 에디터입력 내용 노출  상단 html -->
+		<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></div>
+		<!-- 착용컷 노출 -->
+		<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
+											or #strings.contains(goodsImgList,'_M2.')
+											or #strings.contains(goodsImgList,'_M3.')
+											or #strings.contains(goodsImgList,'_M4.')
+											or #strings.contains(goodsImgList,'_M5.')}">
+			<span class="tit_view">OUTFIT VIEW</span>
+			<span class="model_info">(모델정보 : 185cm / 78kg / XL 착용)</span>
+			<div class="view">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1.') 
+																			or #strings.contains(goodsImg.sysImgNm,'_M2.')
+																			or #strings.contains(goodsImg.sysImgNm,'_M3.')
+																			or #strings.contains(goodsImg.sysImgNm,'_M4.')
+																			or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+				</th:block>
+			</div>
+		</div>
+		<!-- //착용컷 노출 -->
+		<!-- 상품컷 노출 -->
+		<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01.') 
+											or #strings.contains(goodsImgList,'_02.')
+											or #strings.contains(goodsImgList,'_D1.')
+											or #strings.contains(goodsImgList,'_D2.')
+											or #strings.contains(goodsImgList,'_D3.')
+											or #strings.contains(goodsImgList,'_D4.')
+											or #strings.contains(goodsImgList,'_D5.')}">
+			<span class="tit_view">PRODUCT VIEW</span>
+			<div class="view">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.') 
+																			or #strings.contains(goodsImg.sysImgNm,'_02.')
+																			or #strings.contains(goodsImg.sysImgNm,'_D1.')
+																			or #strings.contains(goodsImg.sysImgNm,'_D2.')
+																			or #strings.contains(goodsImg.sysImgNm,'_D3.')
+																			or #strings.contains(goodsImg.sysImgNm,'_D4.')
+																			or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+				</th:block>
+			</div>
+		</div>
+		<!-- //상품컷 노출 -->
+		<!-- 원단 노출 -->
+		<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
+			<span class="tit_view">FABRIC</span>
+			<div class="view">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+				</th:block>
+			</div>
+		</div>
+		<!-- //원단 노출 -->
+		<!-- 라벨 노출 -->
+		<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1.') 
+											or #strings.contains(goodsImgList,'_L2.')}">
+			<span class="tit_view">LABEL INFO</span>
+			<div class="view">
+				<span>
+					<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1.') 
+																			or #strings.contains(goodsImg.sysImgNm,'_L2.')}">
+					<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+					</th:block>
+				</span>
+			</div>
+		</div>
+		<!-- //라벨 노출 -->
+		<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
+			<div class="view">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" >
+					<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+					</th:block>
+			</div>
+		</div>
+			<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" >
+		<!-- 상세 html 이 존재하면  -->
+		<div class="mdhtml_box" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></div>
+			</th:block>
+		<!-- 관리자 에디터입력 내용 노출  하다단 html -->
+		<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>	
+		<!-- 상품필수정보 노출 -->
+		<div class="required_box">
+			<div class="area_infotbl"  th:if="${goodsInfo.goodsType == 'G056_N' and goodsNotiList != null and !goodsNotiList.empty}">
+				<span class="title">상품고시정보</span>
+				<div class="tbl type1">
+					<table>
+						<tbody>
+							<tr  th:each="goodsNoti, status : ${goodsNotiList}" >
+								<th th:text="${goodsNoti.niItemNm}">스타일</th>
+								<td th:text="${goodsNoti.niContent}">F94U-MD01XA60F0</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="area_infotbl" th:if="${goodsInfo.goodsType == 'G056_S' and goodsComposeList != null and !goodsComposeList.empty}">
+				<span class="title">상품고시정보</span>
+				<th:block th:each="goodsCompose, status : ${goodsComposeList}">
+				<div class="tbl type1">
+					<table>
+						<tbody>
+							<tr  th:each="goodsNoti, status : ${goodsCompose.goodsNotiList}" >
+								<th th:text="${goodsNoti.niItemNm}">스타일</th>
+								<td th:text="${goodsNoti.niContent}">F94U-MD01XA60F0</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+				</th:block>
+			</div>
+			<div class="area_kcl" th:if="${goodsSafeNo != null}">
+				<div>
+					<i class="ico ico_kcl"></i>
+				</div>
+				<div>
+					<p class="tit normal" th:text="${goodsSafeNo.certDiv}">
+					</p>
+					<p class="normal">
+						<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
+						해당 없음 
+						</th:block>
+						<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
+						<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank"  th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
+						</th:block>
+					</p>
+				</div>
+			</div>
+			<p class="t_info dot_info mt10"  th:if="${goodsSafeNo != null}">
+				해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
+			</p>
+			<div class="area_infotbl">
+				<span class="title">상품기본정보</span>
+				<div class="tbl type1">
+					<table>
+						<tbody>
+							<tr>
+								<th>상품코드</th>
+								<td th:text="${goodsInfo.goodsCd}">14443216</td>
+							</tr>
+							<tr>
+								<th>상품구분</th>
+								<td th:text="${goodsInfo.goodsGbNm}">병행수입</td>
+							</tr>
+							<tr>
+								<th>브랜드</th>
+								<td th:text="${goodsInfo.brandGroupNm}">TBJ</td>
+							</tr>
+							<tr>
+								<th>상품명</th>
+								<td th:text="${goodsInfo.goodsNm}">남성 테이퍼드 핏 겨울 기모면 스판 올 밴딩 팬츠</td>
+							</tr>
+							<tr>
+								<th>제조자</th>
+								<td>한세엠케이(주)==============>노출필요성 확인</td>
+							</tr>
+							<tr>
+								<th>제조국</th>
+								<td th:text="${goodsInfo.originNm}">베트남</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+				<p class="t_info dot_info mt10">
+					주문제작 상품의 경우 주문 후 제작되어 판매되는 상품으로 제작 시점부터 반품/교환이 어려울 수 있습니다.
+				</p>
+			</div>
+		</div>
+		<!-- //상품필수정보 노출 -->
+	</div>
+</div>
+</html>

+ 3 - 130
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html

@@ -194,7 +194,7 @@
 							
 						</div>
 						<!-- 네이버결제 -->
-						<div class="npay_box">
+						<div class="npay_box" style="display:none;">
 							<div class="np_head">
 								<div><img src="/images/mo/img_npay_txt.png" alt="NAVER 네이버 ID로 간편구매 네이버페이"></div>
 								<div><button><img src="/images/mo/btn_npay_txt.png" alt="Npay 구매"></button></div>
@@ -429,133 +429,6 @@
 				</div>
 			</div>
 			<!-- //쇼핑백팝업 -->
-
-			<!-- 딜제품상세보기팝업 -->
-			<div class="modal pop_full fade pd_pop pd_descrp_pop" id="pdDescrpPop" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true">
-				<div class="modal-dialog" role="document">
-					<div class="modal-content">
-						<div class="modal-header">
-							<div class="deal_listDescrp_open">상품 1</div>
-						</div>
-						<div class="modal-body">
-							<!-- 아이템 -->
-							<div class="item_blk">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-											</div>
-											<p class="itemBrand">NBA 키즈</p>
-											<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-											<p class="itemPrice">
-												134,100
-												<span class="itemPrice_original">149,000</span>
-												<span class="itemPercent">30%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<!-- 아이템 -->
-							<div class="pop_cont"></div>
-							<!-- 상세정보리스트팝업 -->
-							<div class="pd_pop list_pop pd_pop pd_listDescrp_pop" id="listDescrpPop">
-								<div class="modal_content">
-									<!-- <div class="close">닫기</div> -->
-									<div class="listpop_body">
-										<!-- 아이템선택 -->
-										<div class="deal_list_select">
-											<ul class="list">
-												<li class="selected">
-													<div class="item_prod">
-														<div class="item_state">
-															<a href="javascript:void(0)" class="itemLink">
-																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-																</div>
-																<p class="itemBrand">NBA 키즈</p>
-																<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-																<p class="itemPrice">
-																	134,100
-																	<span class="itemPrice_original">149,000</span>
-																	<span class="itemPercent">30%</span>
-																</p>
-															</a>
-														</div>
-													</div>
-												</li> 
-												<li>
-													<div class="item_prod">
-														<div class="item_state">
-															<a href="javascript:void(0)" class="itemLink">
-																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-																</div>
-																<p class="itemBrand">NBA 키즈</p>
-																<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-																<p class="itemPrice">
-																	134,100
-																	<span class="itemPrice_original">149,000</span>
-																	<span class="itemPercent">30%</span>
-																</p>
-															</a>
-														</div>
-													</div>
-												</li>
-												<li>
-													<div class="item_prod">
-														<div class="item_state">
-															<a href="javascript:void(0)" class="itemLink">
-																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-																</div>
-																<p class="itemBrand">NBA 키즈</p>
-																<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-																<p class="itemPrice">
-																	134,100
-																	<span class="itemPrice_original">149,000</span>
-																	<span class="itemPercent">30%</span>
-																</p>
-															</a>
-														</div>
-													</div>
-												</li>
-												<li>
-													<div class="item_prod">
-														<div class="item_state">
-															<a href="javascript:void(0)" class="itemLink">
-																<div class="itemPic">
-																	<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-																</div>
-																<p class="itemBrand">NBA 키즈</p>
-																<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
-																<p class="itemPrice">
-																	134,100
-																	<span class="itemPrice_original">149,000</span>
-																	<span class="itemPercent">30%</span>
-																</p>
-															</a>
-														</div>
-													</div>
-												</li>
-											</ul>
-										</div>
-										<!-- //아이템선택 -->
-									</div>
-								</div>
-							</div>
-							<!-- //상세정보리스트팝업 -->
-						</div>
-						<div class="modal-footer">
-							<button class="btn btn_primary" id="btn_deal_purchase">구매하기</button>
-						</div>
-					</div>
-				</div>
-			</div>
-			<!-- //딜제품상세보기팝업 -->
-
-														
 		</div>
 		<!-- 팝업영역 -->
 
@@ -862,7 +735,7 @@
 		});
 
 		//팝업 - 딜상세정보 리스트팝업
-	/* 	$(document).on('click','#pdDescrpPop .deal_listDescrp_open',function(e){
+	 	$(document).on('click','#pdDescrpPop .deal_listDescrp_open',function(e){
 			$(this).toggleClass("active");
 			 $("#listDescrpPop").toggle();
 			 return false;
@@ -870,7 +743,7 @@
 			$("#pdDescrpPop .deal_listDescrp_open").removeClass("active");
 			$("#listDescrpPop").hide(); 
 			return false;
-		}); */
+		}); 
 			// ============================================================================//
 
 

+ 160 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealFormMob.html

@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsDealFormMob.html
+ * @desc	: 딜상품 레이어 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE		 AUTHOR	  DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   eskim		최초 작성
+ *******************************************************************************
+ -->
+<div class="modal pop_full fade pd_pop pd_descrp_pop" id="layer_goods_deal_desc" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true">
+	 <div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<div class="deal_listDescrp_open">상품 1</div>
+			</div>
+			<div class="modal-body">
+				<!-- 아이템 -->
+				<div class="item_blk">
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+								</div>
+								<p class="itemBrand">NBA 키즈</p>
+								<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+								<p class="itemPrice">
+									134,100
+									<span class="itemPrice_original">149,000</span>
+									<span class="itemPercent">30%</span>
+								</p>
+							</a>
+						</div>
+					</div>
+				</div>
+				<!-- 아이템 -->
+				<div class="pop_cont"></div>
+				<!-- 상세정보리스트팝업 -->
+				<div class="pd_pop list_pop pd_pop pd_listDescrp_pop" id="listDescrpPop">
+					<div class="modal_content">
+						<!-- <div class="close">닫기</div> -->
+						<div class="listpop_body">
+							<!-- 아이템선택 -->
+							<div class="deal_list_select">
+								<ul class="list">
+									<li class="selected">
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+													</div>
+													<p class="itemBrand">NBA 키즈</p>
+													<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+													<p class="itemPrice">
+														134,100
+														<span class="itemPrice_original">149,000</span>
+														<span class="itemPercent">30%</span>
+													</p>
+												</a>
+											</div>
+										</div>
+									</li> 
+									<li>
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+													</div>
+													<p class="itemBrand">NBA 키즈</p>
+													<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+													<p class="itemPrice">
+														134,100
+														<span class="itemPrice_original">149,000</span>
+														<span class="itemPercent">30%</span>
+													</p>
+												</a>
+											</div>
+										</div>
+									</li>
+									<li>
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+													</div>
+													<p class="itemBrand">NBA 키즈</p>
+													<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+													<p class="itemPrice">
+														134,100
+														<span class="itemPrice_original">149,000</span>
+														<span class="itemPercent">30%</span>
+													</p>
+												</a>
+											</div>
+										</div>
+									</li>
+									<li>
+										<div class="item_prod">
+											<div class="item_state">
+												<a href="javascript:void(0)" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+													</div>
+													<p class="itemBrand">NBA 키즈</p>
+													<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+													<p class="itemPrice">
+														134,100
+														<span class="itemPrice_original">149,000</span>
+														<span class="itemPercent">30%</span>
+													</p>
+												</a>
+											</div>
+										</div>
+									</li>
+								</ul>
+							</div>
+							<!-- //아이템선택 -->
+						</div>
+					</div>
+				</div>
+				<!-- //상세정보리스트팝업 -->
+			</div>
+			<div class="modal-footer">
+				<button class="btn btn_primary" id="btn_deal_purchase">구매하기</button>
+			</div>
+		</div>
+	</div>
+</div>	
+<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_goods_qna')" class="close-modal">Close</a>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	// 구성 상품 상세 문의
+	var fnGoodsDetailQna = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/qna/frame", "html", "goodsDealQna", params);
+	}
+	
+	$(document).ready( function() {
+
+		// 상품평정보 
+		var params = new Object();
+		let goodsCd = [[${goodsInfo.goodsCd}]]
+		params.goodsCd = goodsCd;
+		fnGoodsDetailQna(params);  // ajax html
+		
+	});	
+/*]]>*/
+</script>
+
+ </html>

+ 31 - 12
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -752,8 +752,8 @@
 														<li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> 
 														<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
 															th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
-															><th:block th:text="${goodsOption.optCd1}"></th:block>
-															<input type="hidden" name="opt" th:value="${goodsOption.goodsCd}" th:attr="optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
+															><th:block th:text="${goodsOption.optCd1Nm}"></th:block>
+															<input type="hidden" name="opt" th:value="${goodsOption.goodsCd}" th:attr="optCd1=${goodsOption.optCd1},optCd1Nm=${goodsOption.optCd1Nm},optCd2=${goodsOption.optCd2},optCd=${goodsOption.optCd}"/>
 														</li>
 														</th:block>
 													</ul>
@@ -896,6 +896,7 @@
 		let currPrice = $('#cartForm input[name=currPrice]').val();
 		let optCd = $target.attr("optCd");
 		let optCd1 = $target.attr("optCd1");
+		let optCd1Nm = $target.attr("optCd1Nm");
 		let optCd2 = $target.attr("optCd2");
 		let minOrdQty = $target.attr("minOrdQty");
 		let maxOrdQty = $target.attr("maxOrdQty");
@@ -942,7 +943,7 @@
 			tag += '<div class="result_item result_'+optCd+'">\n';
 			tag += '	<div class="opt_header">\n';
 			tag += '		<div class="bundle">\n';
-			tag += '			<span class="item_option">'+optCd1+'/'+optCd2+'</span>\n';
+			tag += '			<span class="item_option">'+optCd1Nm+'/'+optCd2+'</span>\n';
 			tag += '		</div>\n';
 			tag += '	</div>\n';
 			tag += '	<div class="number_count">\n';
@@ -1071,7 +1072,7 @@
 				$selObj.each(function() {
 					tag += '		<div class="bundle">\n';
 					tag += '			<span class="item_name">'+$(this).find('.title').text()+'</span>\n';
-					tag += '			<span class="item_option">'+$(this).find('input[name=opt2]').attr('optcd1')+'/'+$(this).find('input[name=opt2]').attr('optcd2')+'</span>\n';
+					tag += '			<span class="item_option">'+$(this).find('input[name=opt2]').attr('optcd1Nm')+'/'+$(this).find('input[name=opt2]').attr('optcd2')+'</span>\n';
 					tag += '			<input type="hidden" name="selOption" goodsCd="'+goodsCd+'"  optCd="'+optCd+'" qty="'+$(this).find('.item_opt1 ').attr('qty')+'" />	\n';
 					tag += '		</div>\n';
 					addPrice += Number($(this).find('input[name=opt2]').attr('addprice'));
@@ -1194,29 +1195,33 @@
 					if (ridx == 1){
 						var opt_selecter01_1 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_1');	
 						$('.pop_option_select .select_custom.item_opt2.item_opt2_1 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true)
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true);
+						$('.pop_option_select .select_custom.item_opt1.item_opt1_1').addClass('on');
+						$('.pop_option_select .select_custom.item_opt1.item_opt1_1').find('.list').css('display','block');
 					}else if (ridx == 2){
 						var opt_selecter01_2 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_2');
 						$('.pop_option_select .select_custom.item_opt2.item_opt2_2 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').attr('disabled',true)
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').attr('disabled',true);
 					}else if (ridx == 3){
 						var opt_selecter01_3 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_3');
 						$('.pop_option_select .select_custom.item_opt2.item_opt2_3 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').attr('disabled',true)
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').attr('disabled',true);
 					}else if (ridx == 4){
 						var opt_selecter01_4 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_4');
 						$('.pop_option_select .select_custom.item_opt2.item_opt2_4 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true)
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true);
 					}else{
 						var opt_selecter01_5 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_5');
 						$('.pop_option_select .select_custom.item_opt2.item_opt2_4 .combo .list > li').eq(0).trigger("click");
-						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true)
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').attr('disabled',true);
 					}
 					
 				}else{
 					var opt_selecter01_1 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_1');
 					$('.pop_option_select .select_custom.item_opt2 .combo .list > li').eq(0).trigger("click");
-					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true)
+					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').attr('disabled',true);
+					$('.pop_option_select .select_custom.item_opt1.item_opt1_1').addClass('on');
+					$('.pop_option_select .select_custom.item_opt1.item_opt1_1').find('.list').css('display','block');
 				}	
 				
 			}
@@ -1292,7 +1297,7 @@
 					}else{
 							
 					}
-					tag += '<input type="hidden" name="opt2" value="'+ item.goodsCd+'|'+item.optCd +'|'+qty +'" goodsCd="'+item.goodsCd+'" currPrice="'+ item.currPrice +'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
+					tag += '<input type="hidden" name="opt2" value="'+ item.goodsCd+'|'+item.optCd +'|'+qty +'" goodsCd="'+item.goodsCd+'" currPrice="'+ item.currPrice +'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd1Nm="'+item.optCd1Nm+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
 					tag += '</li>\n';
 				});
 				
@@ -1307,18 +1312,30 @@
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						var opt_selecter02_1 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_1');	
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').addClass('on');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
 					}else if (ridx == 2){
 						var opt_selecter02_2 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_2');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').addClass('on');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_2').find('.list').css('display','block');
 					}else if (ridx == 3){
 						var opt_selecter02_3 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_3');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').addClass('on');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_3').find('.list').css('display','block');
 					}else if (ridx == 4){
 						var opt_selecter02_4 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_4');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').addClass('on');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_4').find('.list').css('display','block');
 					}else{
 						var opt_selecter02_5 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_5');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_5').addClass('on');
+						$('.pop_option_select .select_custom.item_opt2.item_opt2_5').find('.list').css('display','block');
 					}
 					
 				}else{
 					var opt_selecter02_1 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_1');
+					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').addClass('on');
+					$('.pop_option_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
 				}	
 			}
 			
@@ -1787,7 +1804,9 @@
 		
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
-			$(".Purchase_pop .pop_option_select").show();
+			$(".Purchase_pop .pop_option_select").show(); 
+			$(".Purchase_pop .pop_option_select").find('.select_custom.item_opt1.item_opt1_1').addClass('on');
+			$(".Purchase_pop .pop_option_select").find('.select_custom.item_opt1.item_opt1_1 .list').css('display','block');
 			return false;
 		});
 		

+ 86 - 47
src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html

@@ -195,9 +195,6 @@
 									</div>
 									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-									<p class="itemText">
-										<span class="tx1">(문의 9,999+)</span>
-									</p>
 									<div class="itemText">
 										<span class="tx1">(문의 <th:block  th:text="${(goodsInfo.goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsInfo.goodsQnaCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</span>
 									</div>
@@ -246,6 +243,80 @@
 </div>
 <!-- //딜배송제품리스트팝업 -->
 
+<!-- 딜제품상세보기팝업 -->
+<div class="modal pop_full fade pd_pop pd_descrp_pop" id="pdDescrpPop" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<div class="deal_listDescrp_open">상품 1</div>
+			</div>
+			<div class="modal-body">
+				<!-- 아이템 -->
+				<div class="item_blk">
+					<div class="item_prod">
+						<div class="item_state">
+							<a href="#none" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+								</div>
+								<p class="itemBrand">NBA 키즈</p>
+								<div class="itemName"><span class="tit_option">[상품1]</span>유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+								<p class="itemPrice">
+									134,100
+									<span class="itemPrice_original">149,000</span>
+									<span class="itemPercent">30%</span>
+								</p>
+							</a>
+						</div>
+					</div>
+				</div>
+				<!-- 아이템 -->
+				<div class="pop_cont" id="goodsDealDetail"></div>
+				<!-- 상세정보리스트팝업 -->
+				<div class="pd_pop list_pop pd_pop pd_listDescrp_pop" id="listDescrpPop">
+					<div class="modal_content">
+						<!-- <div class="close">닫기</div> -->
+						<div class="listpop_body">
+							<!-- 아이템선택 -->
+							<div class="deal_list_select">
+								<ul class="list">
+									<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+										th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+										th:onclick="fnOpenGoodsDealDetail([[${goodsInfo.goodsCd}]], [[${goodsInfo.compsGoodsCd}]])"
+										 class="selected">
+										<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+											<div class="item_state active">
+												<a href="javascript:void(0);" class="itemLink">
+													<div class="itemPic">
+														<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+													</div>
+													<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+													<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+													<p class="itemPrice">
+														<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">89,000</span>
+														<th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+														<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">10%</span>
+													</p>
+												</a>
+												<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+											</div>
+										</div>
+									</li>
+								</ul>
+							</div>
+							<!-- //아이템선택 -->
+						</div>
+					</div>
+				</div>
+				<!-- //상세정보리스트팝업 -->
+			</div>
+			<div class="modal-footer">
+				<button type="button" class="btn btn_primary" id="btn_deal_purchase">구매하기</button>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //딜제품상세보기팝업 -->
 
 <script th:inline="javascript">
 /*<![CDATA[*/
@@ -315,32 +386,27 @@
 				$('.tab_detail_cont.pd_delivery .item_blk').html(tag);
 			}
 		});
-		
 	}
 	
-	
 	// 상품선택시 상품상세내용 변경
-	var fnOpenGoodsDealDetail = function(goodsCd, compsGoodsCd){
-		
-		/* // 콤보박스 선택 처리
-		let $selObj = $('#layer_goods_deal_detail').find('.select_custom.deal_opt_item');
+	var fnOpenGoodsDealDetail = function(goodsCd, compsGoodsCd){debugger;
 		
 		// 탭별 선택시 기본 상품 설정
 		let selIdx = 0;
 		let selfGoodsYn = '';
 		let currPrice = 0;
 		let soldoutYn = "N";
-		$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')) soldoutYn = "Y";
-				return false;
+		$('#listDescrpPop').find('.deal_list_select .list li').each(function() { 
+			if (compsGoodsCd == $(this).find('input[name=selectGoods]').val()){
+				$('#listDescrpPop').find('.deal_list_select .list li').removeClass('selected');
+				$(this).addClass('selected');
+				let tag = $(this).html();
+				$('#pdDescrpPop').find('.item_blk').html(tag);
 			}
 			selIdx ++;
 		});
 		
-		$selObj.find('.combo .list li').eq(selIdx).trigger("click"); */
+		//$selObj.find('.combo .list li').eq(selIdx).trigger("click");
 		
 		// 상세노출
 		fnGoodsDealDesc(compsGoodsCd);
@@ -362,41 +428,13 @@
 		
 	}
 	
-	// 상세 레이어 창닫기
-	var fnCloseGoodsDealDetail = function(){
-		// 선택값 본창에 넘기기
-		/* let $obj = $('.full_pop_fix_r .opt_result');
-		let $taget = $('.pd_detail .opt_result');
-		$taget.html($obj.html());
-		
-		fnSetTotalPrice();
-		
-		$('body').removeClass('lock');
-		$('#goodsDealDetail').html('');
-		$("#layer_goods_deal_detail").hide(); */
-	}
-	
-	// 구성 상품 상세 
-	var fnGoodsDealDetail2 = function(params) {
-		
-		var Param = new Object();
-		var str = '<div class="modal pop_full fade pd_pop pd_descrp_pop" id="layer_goods_deal_desc" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
-
-		if ($('#layer_goods_deal_desc').length == 0) {
-			$('body').append(str);
-		}
-
-		cfOpenLayer(_'/goods/deal/detail/info/frame', 'layer_goods_deal_desc' ,params );
-	
-	}
-
-	
 	// 레이어에서 상품선택시
-	var fnGoodsDealDesc = function(goodsCd){
+	var fnGoodsDealDesc = function(goodsCd){debugger;
 		var params = new Object();
 		params.goodsCd = goodsCd;
 		params.adminYn = "Y";
-		fnGoodsDealDetail2(params);  // ajax html
+		gagajf.ajaxSubmit("/goods/deal/detail/info/frame", "html", "goodsDealDetail", params);
+		$("#pdDescrpPop").modal("show");
 	}
 	
 	$(document).ready( function() {
@@ -407,4 +445,5 @@
 /*]]>*/
 </script>
 </th:block>
+
 </html>

+ 8 - 7
src/main/webapp/WEB-INF/views/mob/mypage/MypagePointFormMob.html

@@ -94,15 +94,16 @@ appendYear($("#month"));
 //날짜변경 이벤트
 var fnChangeDate = function(param) {
 	let url = '/mypage/allpoint/list';
+	let searchDt;
 	
-	
-	//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
-	//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
-	
+	if (typeof param == 'undefined') {
+		searchDt = year + month;
+	}else{
+		searchDt = param;
+	}
 	// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
 	let data = {
-		searchDt : year + "" + month,
-		month : month
+			searchDt  : searchDt
 	};
 	var jsonData = JSON.stringify(data);
 	
@@ -128,6 +129,7 @@ var fnChangeDate = function(param) {
 
 // HTML 그리기
 var fnGetPointTableInfo = function(param) {
+	$("#pointAjaxList").html('');
 	let tag = "";
 	if(param != null && param.length > 0){
 		$.each(param, function(idx,item){
@@ -182,7 +184,6 @@ $("#accumulatePointList").click(function(){
 		
 		$("#accumulatePointList").addClass("active");
 		//$("#plusMinus").text("증감");
-	
 		fnGetPointTableInfo(accumulatePointList);
 });
 

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

@@ -25,6 +25,7 @@ var _uploadDefaultUrl = [[${@environment.getProperty('upload.default.view')}]];
 var _uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
 var _uploadImageUrl = [[${@environment.getProperty('upload.image.view')}]];
 var _frontGb = [[${frontGb}]];
+var _kollusMediaUrl = [[${kollusMediaUrl}]];
 
 var _today = [[${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}]];
 var _realtime = [[${#calendars.format(#calendars.createNow(), 'HHmmss')}]];

+ 106 - 0
src/main/webapp/WEB-INF/views/web/customer/NonCustOrderConfirmFormWeb.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NonCustOrderConfirmFormWeb.html
+ * @desc    : 비회원주문확인
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.20   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<!--  container -->
+<div id="container" class="container mb">
+	<div class="wrap">
+		<div class="content non_mb_oder"> <!-- 페이지특정 클래스 = non_mb_oder -->
+			<div class="cont_head">
+				<h4>비회원 주문 조회</h4>
+			</div>
+			<div class="cont_body">
+				<form id="nonCustOrderForm" class="form_wrap form_col_c form_full" role="form">
+					<div class="form_info">
+						<span class="ico_content_order"></span>
+						<p>
+							고객님의 주문 확인을 위해<br>주문번호 와 비밀번호를 입력하여 주세요.
+						</p>
+					</div>
+					<div class="form_field mt40">
+						<label class="input_label sr-only">이름(주문자명)</label>
+						<div class="ui_col_12">
+							<div class="input_wrap">
+								<input type="text" name="ordNm" placeholder="이름(주문자명)" id="ordNm" minlength="20" required="required" data-valid-name="이름"/>
+							</div>
+						</div>
+					</div>
+					<div class="form_field">
+						<label class="input_label sr-only">휴대폰 번호</label>
+						<div class="ui_col_12">
+							<div class="input_wrap">
+								<input type="text" name="ordTelno" placeholder="휴대폰 번호" id="ordTelno" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
+							</div>
+						</div>
+					</div>
+					<div class="form_field">
+						<label class="input_label sr-only">주문번호</label>
+						<div class="ui_col_12">
+							<div class="input_wrap">
+								<input type="text" name="ordNo" placeholder="주문 번호" id="ordNo" required="required" data-valid-type="numeric" data-valid-name="주문번호"/>
+							</div>
+						</div>
+					</div>
+					<div class="btn_group_block btn_group_md ui_row mb40">
+						<div class="ui_col_12">
+							<button type="button" id="btnNonOrder" class="btn btn_primary btn_block">
+								<span>비회원 주문확인</span>
+							</button>
+						</div>
+					</div>
+					<div class="form_summary clear">
+						<p class="txt normal">
+							STYLE24 고객센터
+							<span data-font="lato" class="c_primary ml10 bold">1544-5336</span>
+						</p>
+						<p class="t_info light mb40">
+							비회원 주문확인 중 궁금하신 사항은 고객센터로 문의해주세요.
+						</p>
+						<p class="txt normal">
+							아직 STYLE24 회원이 아니시라면?
+							<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
+								<span>회원가입</span>
+							</button>
+						</p>
+						<p class="t_info light">
+							쇼핑 혜택충만! STYLE24 회원이 되세요!
+						</p>
+					</div>
+				</form>
+			</div>
+		</div>
+	</div>
+</div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$('#btnNonOrder').on('click', function () {
+		if (!gagajf.validation($('#nonCustOrderForm'))) {
+			return;
+		}
+		mcxDialog.alert("개발중입니다.");
+	});
+
+/*]]>*/
+</script>
+
+</th:block>
+</body>
+</html>
+
+

+ 17 - 20
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -88,11 +88,11 @@
 								<div class="sort tap02" th:if="${filterBrandList!=null and !filterBrandList.empty}" id="brandFilterDiv">
 									<ul>
 										<th:block th:each="filterBrandData, filterBrandStat : ${filterBrandList}">
-										<li>
-											<label class="brand_btn">
-												<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="brand" th:value="${filterBrandData.filterCd}" th:data-id="${filterBrandData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${filterBrandData.filterNm}"></span>
-											</label>
-										</li>
+											<li>
+												<label class="brand_btn">
+													<input type="checkbox" group="filterValue" th:id="${'chkFilterBrand'+filterBrandStat.count}" name="brand" th:value="${filterBrandData.filterCd}" th:data-id="${filterBrandData.filterNm}" onclick="filterSel(this,'brand','off');"><span th:text="${filterBrandData.filterNm}"></span>
+												</label>
+											</li>
 										</th:block>
 									</ul>
 									<a href="javascript:void(0)" class="tap_close">delete-btn</a>
@@ -218,15 +218,15 @@
 								<!-- 필터 -->
 								<div class="fillter">
 									<div class="fillter_box" id="filterData">
-<!--										<span>-->
-<!--											모이몰른-->
-<!--											<a href="javascript:;" class="filter_delete"></a >-->
-<!--										</span>-->
+										<!--										<span>-->
+										<!--											모이몰른-->
+										<!--											<a href="javascript:;" class="filter_delete"></a >-->
+										<!--										</span>-->
 										<!-- 컬러 표시 -->
-<!--										<span>-->
-<!--											<span class="pdColor-color12"></span>-->
-<!--											<a href="javascript:;" class="filter_delete"></a >-->
-<!--										</span>-->
+										<!--										<span>-->
+										<!--											<span class="pdColor-color12"></span>-->
+										<!--											<a href="javascript:;" class="filter_delete"></a >-->
+										<!--										</span>-->
 										<!-- 컬러 표시 -->
 									</div>
 									<button class="fillter_reset" onclick="fnFilterReset();"><span>전체 초기화</span></button>
@@ -363,14 +363,11 @@
 		}
 
 		var fnGoodsListSearch = function (){
-			console.log('1');
 			gagaInfiniteScroll.getHistory();
-			console.log('2');
 		}
 
 		// 상품 검색
 		var fnGetInfiniteScrollDataList = function (pageNum){
-			console.log('3');
 			$("#searchGoodsForm input[name=pageNo]").val(pageNum+1);
 			gagajf.ajaxFormSubmit("/display/category/goods/list", document.searchGoodsForm,  gagaInfiniteScroll.jsonToHtml);
 		}
@@ -435,9 +432,9 @@
 
 			if (cate1 != null) {
 				tag += '<li';
-					if(cate1.cate1No == cate1No){
-						tag += ' class="on"';
-					}
+				if(cate1.cate1No == cate1No){
+					tag += ' class="on"';
+				}
 				tag += '>\n';
 				tag += '	<a href="javascript:javascript:void(0);"';
 				if(cate1.cate1No == cate1No && cate2No == null){
@@ -474,7 +471,7 @@
 							$("#formTitle").text(cate2.cate2Nm);
 						}
 						tag += '	onclick="cfnGoToGoodsList('+brandGroupNo+',\''+cateGb+'\','+cate1.cate1No+','+cate2.cate2No+');">' + cate2.cate2Nm + '</a>\n';
- 						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
 							tag += '<div class="sub_cate"';
 							if(cate2.cate2No == cate2No){
 								tag += ' style="display: block;"';

+ 3 - 3
src/main/webapp/WEB-INF/views/web/display/CategoryMainFormWeb.html

@@ -29,7 +29,7 @@
 	</div>
 
 	<div class="wrap">
-		<th:block th:if="${cateMainLayoutList}" th:each="mainLayoutData, mainStat : ${cateMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SCM','')}">
+		<th:block th:if="${cateMainLayoutList}" th:each="mainLayoutData, mainStat : ${cateMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SCM','')},contentsTitle=${brandMainLayoutData.contentsTitle}">
 			<th:block th:if="${contentsLoc=='001'}">
 				<div class="content dp_submain" > <!-- 페이지특정 클래스 = dp_list -->
 					<div class="cont_head">
@@ -83,7 +83,7 @@
 				<!-- 신상품 -->
 				<div class="content wide new_item" th:if="${newGoodsList != null}">
 					<div class="cont_head">
-						<h3 class="displayH">신상품</h3>
+						<h3 class="displayH" th:text="${contentsTitle}">신상품</h3>
 					</div>
 					<div class="cont_body">
 						<div class="swiper-container post-trendy">
@@ -116,7 +116,7 @@
 			<th:block th:if="${contentsLoc=='003'}">
 				<div class="content dp_best_list" th:if="${bestGoodsList != null}">
 					<div class="cont_head">
-						<h3 class="displayH">베스트</h3>
+						<h3 class="displayH" th:text="${contentsTitle}">베스트</h3>
 					</div>
 					<div class="cont_body">
 						<div class="list_content">

+ 29 - 47
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -460,6 +460,34 @@
 						</div>
 					</div>
 				</th:block>
+
+				<!-- 11. TV 슬라이드 -->
+				<th:block th:if="${contentsLoc=='011'}">
+					<div class="content wide main_tv" th:if="${mainLayoutData.ContentsList != null}">
+						<div class="cont_head">
+							<p class="displayH t_c" th:text="${mainLayoutData.contentsTitle}"></p>
+						</div>
+						<div class="cont_body">
+							<div class="swiper-container post-tv">
+								<div class="swiper-wrapper">
+									<th:block th:each="item, stat : ${mainLayoutData.ContentsList}">
+										<div class="swiper-slide">
+											<div class="movbox">
+												<iframe th:if="${item.strVar1=='Y'}" width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+item.strVar3+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+												<iframe th:if="${item.strVar1=='M'}" width="100%" height="100%" th:src="${'http://v.kr.kollus.com/'+item.strVar3}" ></iframe>
+											</div>
+										</div>
+									</th:block>
+								</div>
+								<div class="swiper-button-prev white"></div> <!-- 클래스명 white 추가 -->
+								<div class="swiper-button-next white"></div>
+							</div>
+							<div class="swiper-controls">
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</th:block>
 			</th:block>
 		</th:block>
 
@@ -739,53 +767,7 @@
 			</div>
 		</div>
 
-		<!-- 11. TV 슬라이드 -->
-		<div class="content wide main_tv">
-			<div class="cont_head">
-				<p class="displayH t_c">STYLE24 TV</p>
-			</div>
-			<div class="cont_body">
-				<div class="swiper-container post-tv">
-					<div class="swiper-wrapper">
-						<div class="swiper-slide">
-							<div class="movbox">
-								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-							</div>
-						</div>
-						<div class="swiper-slide">
-							<div class="movbox">
-								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-							</div>
-						</div>
-						<div class="swiper-slide">
-							<div class="movbox">
-								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-							</div>
-						</div>
-						<div class="swiper-slide">
-							<div class="movbox">
-								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-							</div>
-						</div>
-						<div class="swiper-slide">
-							<div class="movbox">
-								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-							</div>
-						</div>
-						<div class="swiper-slide">
-							<div class="movbox">
-								<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-							</div>
-						</div>
-					</div>
-					<div class="swiper-button-prev white"></div> <!-- 클래스명 white 추가 -->
-					<div class="swiper-button-next white"></div>
-				</div>
-				<div class="swiper-controls">
-					<div class="swiper-pagination"></div>
-				</div>
-			</div>
-		</div>
+
 
 
 	<!-- End Of Main Contents -->

+ 228 - 0
src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html

@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : OutletMainFormWeb.html
+ * @desc    : 아울렛메인 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.20   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+
+	<div id="container" class="container dp">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="index.html">홈</a></li>
+				<li class="bread_2depth">아울렛</li>
+			</ul>
+		</div>
+
+		<div class="wrap">
+			<th:block th:if="${outletMainLayoutList}" th:each="mainLayoutData, mainStat : ${outletMainLayoutList}" th:with="contentsLoc=${#strings.replace(mainLayoutData.contentsLoc,'SOM','')},contentsTitle=${mainLayoutData.contentsTitle}">
+			<!-- 상단 스크롤 슬라이드 배너 -->
+			<th:block th:if="${contentsLoc=='001'}">
+			<div class="content dp_submain">
+				<div class="cont_head">
+					<div>
+						<h3>아울렛</h3>
+					</div>
+				</div>
+				<div class="cont_body" th:if="${planningList != null and !planningList.empty}">
+					<div class="swiper-container">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide" th:each="item, status : ${planningList}">
+								<a th:href="${item.strVar1}">
+									<div class="img">
+										<img th:src="${@environment.getProperty('domain.image') + item.imgPath1}" alt="서브메인 썸네일">
+									</div>
+									<div class="txt">
+										<p class="subject" th:text="${item.strTitle1}"></p>
+										<span th:text="${item.subText1}"></span>
+									</div>
+								</a>
+							</div>
+						</div>
+						<div class="swiper-controls">
+							<div class="swiper-scrollbar"></div>
+						</div>
+					</div>
+				</div>
+			</div>
+			</th:block>
+			<!-- //상단 스크롤 슬라이드 배너 -->
+
+			<th:block th:if="${contentsLoc=='004'}">
+				<!-- 카테고리 바로가기 -->
+				<div class="content wide dp_category">
+					<div class="cont_head">
+						<h4>카테고리 바로가기</h4>
+					</div>
+					<div class="cont_body">
+						<div class="dp_cate_list">
+							<a href="">전체</a>
+							<a href="">여성</a>
+							<a href="">남성</a>
+							<a href="">유아동</a>
+							<a href="">골프</a>
+							<a href="">라이프</a>
+						</div>
+					</div>
+				</div>
+			</th:block>
+
+			<!-- MD 추천 아이템 -->
+			<th:block th:if="${contentsLoc=='002'}">
+			<div class="content md_item" th:if="${mdPickGoodsList != null}">
+				<div class="cont_head">
+					<h4 th:text="${contentsTitle}">MD가 추천하는 아울렛 아이템</h4>
+				</div>
+				<div class="cont_body">
+					<div class="swiper-container">
+						<div class="swiper-wrapper">
+							<div class="swiper-slide" th:each="item, status : ${mdPickGoodsList}">
+								<div class="item_prod">
+									<div class="item_state">
+										<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM002', planDtlSq=''">관심상품 추가</button>
+										<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM002');">
+											<div class="itemPic">
+												<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}" th:alt="${item.goodsCd}"/>
+											</div>
+											<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+											<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+											<p class="itemPrice">[[${#numbers.formatInteger(item.currPrice,0,'COMMA')} + 원]]
+												<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
+												<span class=" itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
+											</p>
+											<div class="itemComment" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+										</a>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="swiper-pagination"></div>
+					<div class="swiper-button-prev"></div>
+					<div class="swiper-button-next"></div>
+				</div>
+			</div>
+			</th:block>
+			<!-- //MD 추천 아이템 -->
+			<!-- 베스트 상품 리스트 -->
+			<th:block th:if="${contentsLoc=='003'}">
+			<div class="content dp_best_list" th:if="${bestGoodsList != null}">
+				<div class="cont_head">
+					<div>
+						<h4 th:text="${contentsTitle}">베스트</h4>
+					</div>
+				</div>
+				<div class="cont_body">
+					<div class="list_content">
+						<div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
+							<div class="item_prod" th:each="item, status : ${bestGoodsList}">
+								<div class="item_state">
+									<button type="button" class="itemLike" th:classappend="${item.likeIt == 'likeit'}? 'likeit' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${item.goodsCd}, ithrCd='', contentsLoc='SOM003', planDtlSq=''">관심상품 추가</button>
+									<a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${item.goodsCd}]], '', '', 'SOM003');">
+										<div class="rank ranker"><span>1</span></div>
+										<div class="itemPic">
+											<img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + item.sysImgNm}">
+										</div>
+										<p class="itemBrand" th:text="${item.brandGroupNm}">BRAND NAME</p>
+										<div class="itemName" th:text="${item.goodsFullNm}">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>
+										<p class="itemPrice">[[${#numbers.formatInteger(item.currPrice,0,'COMMA')} + 원]]
+											<span class="itemPrice_original" th:if="${item.currPrice != item.listPrice}" th:text="${#numbers.formatInteger(item.listPrice,3,'COMMA')}">89,000</span>
+											<span class=" itemPercent" th:if="${item.currPrice != item.listPrice}" th:text="${(item.listPrice == 0 ? 0 : #numbers.formatDecimal((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100, 1, 0)) + '%'}">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" th:text="${item.goodsTnm}">#주문 폭주 상품</div>
+									</a>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			</th:block>
+			</th:block>
+			<!-- //베스트 상품 리스트 -->
+		</div>
+	</div>
+
+	<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		//fnSetCategory1Depts();
+	});
+
+	/* SLIDE - 상단 스크롤 슬라이드 배너 */
+	var submain_slide = new Swiper('.dp_submain .swiper-container', {
+		slidesPerView: 4,
+		spaceBetween: 20,
+		freeMode:true,
+		scrollbar: {
+			el: '.dp_submain .swiper-scrollbar',
+			hide: false,
+		},
+	});
+
+	/* SLIDE - MD ITEMS */
+	var dp_submain_mditem = new Swiper('.dp .md_item .swiper-container', {
+		slidesPerView: 5,
+		spaceBetween: 20,
+		watchSlidesProgress: true,
+		watchSlidesVisibility: true,
+		allowTouchMove: false,
+		speed : 1000,
+		autoplay: {
+			delay: 3000,
+			disableOnInteraction:false,
+		},
+		navigation: {
+			nextEl: '.dp .md_item .swiper-button-next',
+			prevEl: '.dp .md_item .swiper-button-prev',
+		},
+		pagination: {
+			el: '.dp .md_item .swiper-pagination',
+			clickable: true,
+		},
+	});
+// 카테고리1Depts 설정
+	var fnSetCategory1Depts = function() {
+		let allCate = [[${allCateList}]];
+		$.each(allCate, function(idx1, cate1) {
+			if ([[${params.cate1No}]] == cate1.cate1No) {
+				let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					$.each(cate1.cate2List, function(idx2, cate2) {
+						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+					});
+				}
+				$('.dp_cate_list').html(tag);
+				$('.cate1Nm').html(cate1.cate1Nm);
+			}
+		});
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 16 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -342,7 +342,7 @@
 						tagUp = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Up\')">\n';
 						tagDown = '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2(this, \'Down\')">\n';	
 					}
-					tag2 += '<div>'+ item.optCd1+'</div>\n';
+					tag2 += '<div>'+ item.optCd1Nm+'</div>\n';
 					if (item.addPrice > 0){
 						tag2 += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
 					}
@@ -365,11 +365,17 @@
 				if (flag == "layer"){
 					$objUp.append(tagUpS);
 					var pop_desc_option02 = new sCombo('.pd_descrp_pop .opt_select .select_custom.deal_opt1');
+					$('.pd_descrp_pop .opt_select .select_custom.deal_opt1').addClass('on');
+					$('.pd_descrp_pop .opt_select .select_custom.deal_opt1').find('.list').css('display','block');
 				}else{
 					$objUp.append(tagUpS);
 					$objDown.append(tagDownS);
 					var detail_deal_option02 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt1');
+					$('.pd_detail .opt_select .select_custom.deal_opt1').addClass('on');
+					$('.pd_detail .opt_select .select_custom.deal_opt1').find('.list').css('display','block');
 					var desc_option02 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt1');
+					$('.pd_desc_wrap .opt_select .select_custom.deal_opt1').addClass('on');
+					$('.pd_desc_wrap .opt_select .select_custom.deal_opt1').find('.list').css('display','block');
 				}
 				
 			}
@@ -454,7 +460,7 @@
 					if (item.addPrice > 0){
 						tag2 += '<div>'+ item.addPrice.addComma() +'원</div>\n';	
 					}
-					tag2 += '<input type="hidden" name="opt2" value="'+ goodsCd +'" currPrice="'+ currPrice+'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
+					tag2 += '<input type="hidden" name="opt2" value="'+ goodsCd +'" currPrice="'+ currPrice+'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'" optCd1Nm="'+item.optCd1Nm+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
 					tag2 += '</li>\n';
 					
 					tagUpS += tag1+tagUp+tag2;
@@ -473,11 +479,17 @@
 				if (flag == "layer"){
 					$objUp.append(tagUpS);
 					var pop_desc_option02 = new sCombo('.pd_descrp_pop .opt_select .select_custom.deal_opt2');
+					$('.pd_descrp_pop .opt_select .select_custom.deal_opt2').addClass('on');
+					$('.pd_descrp_pop .opt_select .select_custom.deal_opt2').find('.list').css('display','block');
 				}else{
 					$objUp.append(tagUpS);
 					$objDown.append(tagDownS);
 					var detail_deal_option03 = new sCombo('.pd_detail .opt_select .select_custom.deal_opt2');
+					$('.pd_detail .opt_select .select_custom.deal_opt2').addClass('on');
+					$('.pd_detail .opt_select .select_custom.deal_opt2').find('.list').css('display','block');
 					var desc_option03 = new sCombo('.pd_desc_wrap .opt_select .select_custom.deal_opt2');
+					$('.pd_desc_wrap .opt_select .select_custom.deal_opt2').addClass('on');
+					$('.pd_desc_wrap .opt_select .select_custom.deal_opt2').find('.list').css('display','block');
 
 				}
 			}
@@ -512,6 +524,7 @@
 		let currPrice = $target.attr("currPrice");
 		let optCd = $target.attr("optCd");
 		let optCd1 = $target.attr("optCd1");
+		let optCd1Nm = $target.attr("optCd1Nm");
 		let optCd2 = $target.attr("optCd2");
 		let minOrdQty = $target.attr("minOrdQty");
 		let maxOrdQty = $target.attr("maxOrdQty");
@@ -569,7 +582,7 @@
 			tag += '<div class="result_item result_'+optCd+'">\n';
 			tag += '	<div class="opt_header">\n';
 			tag += '		<span class="item_name">'+goodsNm+'</span>\n';
-			tag += '		<span class="item_option">'+optCd1+'/'+optCd2+'</span>\n';
+			tag += '		<span class="item_option">'+optCd1Nm+'/'+optCd2+'</span>\n';
 			tag += '	</div>\n';
 			tag += '	<div class="number_count">\n';
 			tag += '		<span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>\n';

+ 84 - 23
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -31,32 +31,68 @@
 			<div class="cont_body">
 				<!-- CONT-BODY -->
 				<div class="item_detail">
-					<div class="area_pic">
-						<div class="thumb_nav_wrap"  th:if="${goodsImgList != null and !goodsImgList.empty}" >
+					<div class="area_pic" th:if="${(goodsImgList != null and !goodsImgList.empty) or (goodsVideoList != null and !goodsVideoList.empty)}" 
+										th:with="videoYn=${(goodsVideoList != null and !goodsVideoList.empty)? 'Y' :'N'}">
+						<div class="thumb_nav_wrap" >
 							<div class="thumbnav">
-									<div class="swiper-container">
-										<div class="swiper-wrapper">
-										<th:block th:each="goodsImg, status : ${goodsImgList}">
-											<div class="swiper-slide" th:classappend="${status.first}? 'on' : ''" 
-													th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
-															or #strings.contains(goodsImg.sysImgNm,'_L1.')
-															or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-											<a th:href="${'#navLocate'+ status.count}"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></div>
-										</th:block>	
+								<div class="swiper-container" >
+									<div class="swiper-wrapper">
+									<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+										<div class="swiper-slide" th:classappend="${status.first}? 'on' : ''" >
+											<a th:href="${'#navLocate'+ status.count}">
+												<span class="thumb  mov">
+												<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+												<img th:src="${'https://img.youtube.com/vi/'+goodsVideo.kmcKey+'/default.jpg'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												</th:block>
+												<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+												</th:block>
+												</span>
+											</a>
+										</div>
+									</th:block>
+									<th:block th:each="goodsImg, status : ${goodsImgList}">
+										<div class="swiper-slide" th:classappend="${status.first and videoYn == 'N'}? 'on' : ''"  th:with="count=${(videoYn == 'Y')?  (status.count +1): status.count }"
+																th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
+																		or #strings.contains(goodsImg.sysImgNm,'_L1.')
+																		or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
+											<a th:href="${'#navLocate'+ count}">
+												<span class="thumb">
+												<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span>
+											</a>
 										</div>
+									</th:block>	
 									</div>
-									<div class="swiper-button-next"></div>
-									<div class="swiper-button-prev"></div>
 								</div>
+								<div class="swiper-button-next"></div>
+								<div class="swiper-button-prev"></div>
+							</div>
 						</div>
-						<div class="thumb_list_wrap"  th:if="${goodsImgList != null and !goodsImgList.empty}" >
+						<div class="thumb_list_wrap">
 							<ul>
-								<th:block th:each="goodsImg, status : ${goodsImgList}">
-								<li th:id="${'navLocate'+ status.count}"  th:classappend="${status.first}? 'on' : ''" 
+								<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+								<li th:id="${'navLocate'+ status.count}"  th:classappend="${status.first}? 'on' : ''">
+									<div class="movbox">
+										<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+										<iframe width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0&autoplay=1&mute=1'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+										</th:block>
+										<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+										</th:block>
+									</div>
+								</li>
+								</th:block>
+								<th:block th:each="goodsImg, status : ${goodsImgList}" >
+								<th:block th:with="count=${(videoYn == 'Y')?  (status.count +1): status.count }">
+								<li th:id="${'navLocate'+ count}"  th:classappend="${status.first and videoYn == 'N'}? 'on' : ''" 
 									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
 												or #strings.contains(goodsImg.sysImgNm,'_L1.')
 												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
-									<a href="javascript:void(0);"><span class="thumb"><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></span></a></li>
+									<a href="javascript:void(0);">
+										<span class="thumb">
+											<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+										</span>
+									</a>
+								</li>
+								</th:block>
 								</th:block>
 							</ul>
 						</div>
@@ -229,7 +265,7 @@
 													<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsCompose.qty}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
 														th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
 														>
-														<div th:text="${goodsOption.optCd1}">상품옵션</div>
+														<div th:text="${goodsOption.optCd1Nm}">상품옵션</div>
 														<div th:if="${goodsOption.addPrice > 0}" th:text="|${#numbers.formatInteger(goodsOption.addPrice, 0,'COMMA')}원|">0원</div>
 														<input type="hidden" name="opt" th:attr="addPrice=${goodsOption.addPrice}, optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
 													</li>
@@ -430,13 +466,24 @@
 				</div>
 				<!-- //상품설명 노출 -->
 				<!-- 관리자 에디터입력 내용   공지 html -->
+				<div class="mdhtml_box">
 					<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
-				<div class="mdhtml_box" th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></div>
+				<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
 					</th:block>
 				<!-- 관리자 에디터입력 내용   공지 html -->
+				<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+				<div class="movblock">
+					<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+					<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+					</th:block>
+					<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+					</th:block>
+				</div>
+				</th:block>
+				
 				<!-- 관리자 에디터입력 내용 노출  상단 html -->
-				<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></div>
-					
+				<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+				</div>	
 				<!-- 착용컷 노출 -->
 				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
 													or #strings.contains(goodsImgList,'_M2.')
@@ -1155,18 +1202,32 @@
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');	
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_1').addClass('on');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
 					}else if (ridx == 2){
-						var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');	
+						var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_2').addClass('on');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_2').find('.list').css('display','block');
 					}else if (ridx == 3){
 						var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_3').addClass('on');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_3').find('.list').css('display','block');
 					}else if (ridx == 4){
 						var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_4').addClass('on');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_4').find('.list').css('display','block');
 					}else{
 						var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_5').addClass('on');
+						$('.opt_set_select .select_custom.item_opt2.item_opt2_5').find('.list').css('display','block');
 					}
 					
 				}else{
-					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1'); 
+					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
+					//$('.opt_select .select_custom.item_opt2').removeClass('on');
+					$('.opt_select .select_custom.item_opt2.item_opt2_1').addClass('on');
+					$('.opt_select .select_custom.item_opt2.item_opt2_1').find('.list').css('display','block');
+					
 				}	
 			}
 			

+ 4 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html

@@ -65,10 +65,12 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	var fnGetList = function() {
+	var fnGetList = function() {debugger;
 		
 		// 상품문의창 닫기
-		cfCloseLayer('layer_goods_qna_reg')
+		//$("#layer_goods_qna_reg").modal("hide");
+		//cfCloseLayer('layer_goods_qna_reg');
+		$('.close-modal').trigger("click");
 	
 		$('#goodsQnaForm  input[name="secretYn"]').val('');
 		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){

+ 7 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsQnaDetailFormWeb.html

@@ -77,9 +77,11 @@
 		let contentQna = $(this).val();
 		$('#itemqna_cnt').html("(<em class='c_primary'>"+contentQna.length+"</em>/500자)");  
 		if (contentQna.length > 500){
-			alert("최대 500자까지 입력 가능합니다.");
 			$(this).val(contentQna.substring(0, 500));
 			$('#itemqna_cnt').html("(<em class='c_primary'>500</em>/500자)");
+			mcxDialog.alert("최대 500자까지 입력 가능합니다.");
+			return false;
+			
 		}
 	});
 	
@@ -100,7 +102,9 @@
 			return false;
 		}
 		
-		mcxDialog.confirm("저장하시겠습니까?", {
+		gagajf.ajaxFormSubmit($('#goodsQnaDetailForm').prop('action') , $('#goodsQnaDetailForm'), fnGetList());
+		
+		/* mcxDialog.confirm("저장하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
@@ -109,7 +113,7 @@
 						, fnGetList()
 				);
 			}
-		});
+		}); */
 	
 	});
 

+ 24 - 8
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -341,8 +341,8 @@
 														<!-- 이미지첨부 -->
 														<div class="form_field">
 															<div class="imgUpload">
-																<label for="fileAdd" class="fileAdd">첫번째업로드</label>
-																<input type="file" id="fileAdd" name="files[]">
+																<label for="fileAdd" class="fileAdd" id="fileAdd_reply">첫번째업로드</label>
+																<input type="file" id="fileAdd" name="files">
 															</div>
 														</div>
 														<!-- //이미지첨부 -->
@@ -551,10 +551,25 @@ $('#reviewContent').keyup(function (e){
 $('#fileAdd').on('change', function() { fnChooseFile(this); });
 
 var fnChooseFile = function(obj) {
+	var picLength = $(".pics").length;
+	
 	// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
 	var file = obj.files[0];
-	
-	if (!gagajf.isNull(file.size) && Number(file.size) > 10 * 1000000) {
+
+	if (!gagajf.isNull(file.name)) {
+		var extension = "\.(jpg|jpeg|png)$";
+		if (!(new RegExp(extension, "i")).test(file.name)) {
+			mcxDialog.alertC('이미지는 [jpg, jpeg, png] 파일만 가능합니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(obj).parent('.imgUpload').find('.removes').trigger('click');
+				}
+			});
+			return false;
+		}
+	}
+	// 이거 왜 안먹히지 
+	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {
 		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
 			sureBtnText: "확인",
 			sureBtnClick: function() {
@@ -565,16 +580,17 @@ var fnChooseFile = function(obj) {
 	}
 	
 	// 파일 업로드
-	gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+	 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
 			, file
 			, function(result) {
 				// 업로드한 파일명 설정
-				$('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
-				$('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
+				$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+				$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
 			}
-	);
+	); 
 }
 
+
 $(document).ready(function() {
 	if (reviewList.goodsType == 'G056_S') {
 		$.each(reviewList.colorNmArr, function(index, option) {

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

@@ -108,7 +108,7 @@
 						<div class="content dp_special" th:id="${a.tmplType + a.planContSq}"></div>
 				</th:block>
 			</th:block>
-			<div class="coner_item01" th:utext="${#strings.replace(#strings.replace(fsrcInfoBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div>
+			<div class="coner_item01" th:if="${fsrcInfoBtm != null}" th:utext="${#strings.replace(#strings.replace(fsrcInfoBtm.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"></div>
 			
 			 <!-- 댓글리스트 -->
 			<th:block th:if="${planInfo.replyYn == 'Y'}">
@@ -551,7 +551,6 @@ if(goods4.length>0){
 			html += '<div class="cont_head">';
 			html += '<div>';
 			html += '        <h4>';
-			console.log(template[i].linkOpenGb );
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				if (template[i].linkOpenGb == "M") { //본창
 					html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
@@ -798,7 +797,7 @@ var fnSearchCallback = function (result) {
 				 html += '			<span class="date">'+item.entryDt+'</span>';
 				 html += '		</div>';
 				 html += '		<div class="cmt_cont">';
-				 html += '			<div class="img_wrap clear">';
+				 html += '			<div class="img_wrap clear" onclick="fnImgAttach(this)">';
 				 if (result.replyAttachList.length>0) {
 					for (var i = 0; i < result.replyAttachList.length; i++) {
 						if(result.replyAttachList[i].planEntrySq == item.planEntrySq){
@@ -930,12 +929,47 @@ var fnReplySave = function() {
 		gagajf.ajaxJsonSubmit('/planning/reply/save', jsonData,function() {
 			ajaxReplyList();	
 			$('#replyText').val('');
+			$('.pics').remove();
 			});
 		}
 	})
 }
 
 
+var fnImgAttach = function (obj) {
+	 $("#thumbImgPop .swiper-wrapper").empty();
+	//var popSlideIndex = $(obj).find('span').length -1;
+	var popSlideIndex = 0;
+	contactPopSwiper.slideTo(popSlideIndex);
+	contactPopSwiper.update();
+	
+	var contactImglength = $(obj).find('span').length;
+	var popImgHtml = "";
+	for (i = 0; i < contactImglength; i++) {
+		
+		var contactImgSrc =$(obj).find('img').eq(i).attr('src');
+		popImgHtml += "<div class='swiper-slide'><div class='pop_img' style='background-image:url("+ contactImgSrc +")'></div></div>";
+	}
+
+	$("#thumbImgPop .swiper-wrapper").append(popImgHtml);
+	$('#thumbImgPop').modal("show");
+	
+	return false;
+}
+
+/* SLIDE - 댓글 이미지 팝업 */
+var contactPopSwiper = new Swiper('.thumb_img_pop .swiper-container', {
+	navigation: {
+		nextEl: '.thumb_img_pop .swiper-button-next',
+		prevEl: '.thumb_img_pop .swiper-button-prev',
+	},
+	pagination: {
+		el: '.thumb_img_pop .swiper-pagination',
+		clickable: true,
+	},
+	observer:true,
+	observeParents: true,
+});				
 
 
 $(document).ready( function() {
@@ -1066,6 +1100,7 @@ $(document).ready( function() {
 			$('#fileAdd').removeAttr("disabled");
 		}
 	});			
+	
 
 	//댓글 작성시 글자 카운트
 	$('.cmt_ans').keyup(function (e){
@@ -1078,42 +1113,6 @@ $(document).ready( function() {
 		}
 	});
 	
-	//팝업 - 댓글 이미지 슬라이드
-	 $(document).on('click','.cmt_cont .img_wrap .pics',function(e){
-		$("#thumbImgPop .swiper-wrapper").empty();
-		var popSlideIndex = $(this).index();
-		contactPopSwiper.slideTo(popSlideIndex);
-		contactPopSwiper.update();
-
-		var contactImglength = $('.cmt_cont .img_wrap .pics').length;
-		var popImgHtml = "";
-		for (i = 1; i <= contactImglength; i++) {
-			var contactImg = $(this).find('img');
-			var contactImgSrc = $('.cmt_cont .img_wrap .pics:nth-child('+i+') img').attr('src');
-			popImgHtml += "<div class='swiper-slide'><div class='pop_img' style='background-image:url("+ contactImgSrc +")'></div></div>";
-		}
-
-		$("#thumbImgPop .swiper-wrapper").append(popImgHtml);
-		$('#thumbImgPop').modal("show");
-		
-		return false;
-	});         
-	
-	 /* SLIDE - 댓글 이미지 팝업 */
-	var contactPopSwiper = new Swiper('.thumb_img_pop .swiper-container', {
-		navigation: {
-			nextEl: '.thumb_img_pop .swiper-button-next',
-			prevEl: '.thumb_img_pop .swiper-button-prev',
-		},
-		pagination: {
-			el: '.thumb_img_pop .swiper-pagination',
-			clickable: true,
-		},
-		observer:true,
-		observeParents: true,
-	});				
-
-
 
 });
 </script>

+ 6 - 4
src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html

@@ -48,14 +48,14 @@
                             <p id="planningTotCnt"><span></span>개의 기획전</p>
                         </div>
                     </div>
-					 <div class="list_content nodata" style="display: none;" id="divPlanningNoData"> 데이터 없을시 클래스 nodata 추가
+					 <div class="list_content nodata" style="display: none;" id="divPlanningNoData"> 
 						<div class="list_defult">
 							<div>
 								<img src="/images/pc/ico_content_find.png" alt=""/>
 								<p>등록된 기획전이 없습니다.</p>
 							</div>
 							<div class="ui_row">
-								<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>으로 가기</span></button>
+								<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>메인으로 가기</span></button>
 							</div>
 						</div>
 					</div> 
@@ -120,7 +120,10 @@
 		
 		$.getJSON(actionUrl	, function(result, status) {
 				if (status == 'success') {
-
+					if(result.length == 0){
+						$('#planningTotCnt').html('<span>0</span>개의 기획전');
+					}
+						
                     if (result.length > 0) {
                        $('#planningTotCnt').html('<span>' + result.length.addComma() + '</span>개의 기획전');
 						
@@ -170,7 +173,6 @@
 						
 						tag += '</div>\n';
 						$('#divPlanningList').html(tag);
-						
 						$('#divPlanningNoData').hide();
 						$('#divPlanningList').show();
 

+ 3 - 6
src/main/webapp/biz/goods.js

@@ -281,10 +281,8 @@ var fnFilterSet = function (searchId, sizeGb){
 	$("#searchGoodsForm input:hidden[name="+searchId+"Search]").remove();
 	var tag = '';
 	if(searchId=='size'){
-		//$('#filterForm #sizeLi'+sizeGb).find('input[name='+searchId+']:checked').each(function(idx,item){
 		$('#filterForm input[name='+searchId+']:checked').each(function(){
-			//console.log('idx::::'+item);
-			tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).val()+'"/>\n';
+			tag = '<input type="hidden" name="'+searchId+'Search" value="'+$(this).attr('data-id')+'"/>\n';
 			$("#searchGoodsForm").append(tag);
 		});
 	}else{
@@ -294,15 +292,14 @@ var fnFilterSet = function (searchId, sizeGb){
 		});
 	}
 
-
 	fnGoodsListSearch();
 }
 
 // 상품상세 필터 삭제
-var fnDeleteFilter = function (obj, gubun, sizeGb){
+var fnDeleteFilter = function (obj, gubun, staus, sizeGb){
 	$("#"+gubun+"FilterDiv > ul > li").each(function(idx,item) {
 		if(gubun == 'size'){
-			$("#sizeLi"+sizeGb+" .size_btn").each(function (){
+			$('#sizeLi'+sizeGb+' .size_btn').each(function (){
 				if($(obj).closest("span").text() == $(this).find('input').attr('data-id')){
 					$(this).find('input').click();
 				}

+ 153 - 120
src/main/webapp/ux/mo/css/layout_m.css

@@ -270,6 +270,13 @@
 .mb .mb_login .captcha .captcha_area {margin-top:0.6rem;}
 .mb .mb_login .captcha .captcha_area input {padding:1.3rem 0 1.5rem 1.3rem;}
 .mb .mb_login .captcha .captcha_area label { display: block; width: 100%; margin:-0.8rem 0 0.4rem 0;}
+.mb .btn_mb_wrap {text-align: center; margin:2rem 0 -3rem 0;}
+.mb .btn_mb_wrap ul {display: inline-block;}
+.mb .btn_mb_wrap ul:after {content:''; display: block; clear:both;}
+.mb .btn_mb_wrap ul > li{position:relative; float:left; margin-left:1rem; padding-left:1rem; line-height: 1;}
+.mb .btn_mb_wrap ul > li:first-child{margin-left:0rem; padding-left:0rem;}
+.mb .btn_mb_wrap ul > li::before{content: ''; position:absolute; width:0.1rem; height:1rem; left:0; top:50%; transform:translateY(-50%); background:#ddd;}
+.mb .btn_mb_wrap ul > li:first-child::before{display:none;}
 .mb .mb_login .btn{width:100%; height:4.5rem;}
 
 /* mb_idInquiry_1 */
@@ -415,6 +422,11 @@
 .pd.deal .pd_detail > .inner:nth-of-type(3){margin-bottom:0;}
 .pd_detail .pd_info > .inner.wide,
 .pd_detail > .inner.wide{padding-left:0!important; padding-right:0!important; padding-bottom:0;}
+
+.pd_detail .movbox {position: relative;height: 0;padding-top: 100%;padding-bottom:50.25%;overflow: hidden;transition: all 300ms ease;transform: scale(1);}
+.pd_detail .movbox iframe{position: absolute;left: 0;right: 0;top: 0;bottom: 0;width: 100%;height: 100%;z-index: 1;}
+
+
 .pd_detail .thumb_box{position: relative;}
 /* .pd_detail .thumb_box:after{position:absolute; content:''; left:0; bottom:0; width:100%; height:3rem; background-color:rgba(255,255,255,.95); z-index:2;} */
 .pd_detail .thumb_box .thumb_list{position:relative;}
@@ -807,12 +819,34 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .dp .popup_box .button_list.clear button{width:100% !important;}
 .dp .open_categori a{display: inline-block;font-size: 1.2rem;font-weight: 300;padding-right: 1.4rem;background: url(/images/mo/ico_sort_arrow.png) no-repeat right center;background-size: 0.7rem 0.43rem;}
 .dp .Bulletship_foot .clear{background:#f5f5f5; margin:4rem -2rem; padding:4rem 0 2.5rem 2rem;}
-.dp .dp_Bulletship .inner:first-child{margin-bottom:0; padding-bottom:0;}
-.dp .dp_Bulletship .items_option{padding-top:0; margin:0 2rem;}
+/*.dp .dp_Bulletship .inner:first-child{margin-bottom:0; padding-bottom:0;}*/
+.dp .bulletship .items_option{padding-top:0; margin:0 2rem;}
 .dp .items_option #filter{height:4.5rem; border:0.1rem solid #dddddd;}
-.dp .dp_exhibition .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
-.dp .dp_Bulletship .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
+.dp .dp_listItems_wrap .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
+.dp .bulletship .items_option #filter{font-size:1.2rem; color:#666666; width:100%;line-height:4.5rem; padding:0 1.5rem; background-color:#fff;}
 .Purchase_pop .select_custom .combo .list>li[data-soldout="true"]::after{top:1rem}
+/* 210416 */
+.dp .filter_box .filter_body .daps1{position:sticky; top:0; background-color:#fff; z-index: 999;}
+.deal_list_select .list>li[aria-disabled="true"] {
+	text-decoration: line-through;
+    background: #fff;
+    color: #bbb;
+	pointer-events: none;
+}
+.deal_list_select .list>li[data-soldout="true"] {
+	pointer-events: none;
+}
+.deal_list_select .list>li[data-soldout="true"]::after {
+	content: '품절';
+    display: inline-block;
+    font-size: 12px;
+    color: #bbbbbb;
+    position: absolute;
+    right: 15px;
+    top: 0;
+    bottom: 0;
+}
+.dp .mid_banner{margin-top:-6rem}
 
 
 
@@ -1700,38 +1734,38 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .dp .dp_exhibition .list_content .list_item .visual .txtWrap p.txt_xs {font-size: 1.2rem; margin-top:1.6rem; font-weight: 300;}
 
 /* 기획전 - dp_detail-case */
-.dp .dp_exhibition .dp_subtitle{padding-top:4rem;}
-.dp .dp_exhibition{background-color:#f5f5f5;}
-.dp .dp_exhibition .inner{padding-bottom: 4rem; margin-bottom: 1.3rem; background-color:#fff; }
+.dp .dp_subtitle{padding-top:4rem;}
+/*.dp .dp_exhibition{background-color:#f5f5f5;}
+.dp .dp_exhibition .inner{padding-bottom: 4rem; margin-bottom: 1.3rem; background-color:#fff;}
 .dp .dp_exhibition .inner:first-child{padding-bottom:0; margin-bottom:0;}
 .dp .dp_exhibition .inner:last-child{padding-bottom: 4rem;}
-.dp .dp_exhibition .inner.bg_gray{background-color:#f5f5f5;}
-.dp .dp_exhibition .items_option{padding-top:4rem;}
-.dp .dp_exhibition .items_option .select{display:block;}
-.dp .dp_exhibition .shar_box{position:relative; padding:2rem;}
-.dp .dp_exhibition .shar_box .p{font-size:1.4rem; color:#222; font-weight:500;}
-.dp .dp_exhibition .shar_box .sns_share{position:absolute; right:2rem; top:50%; width:1.4rem; height:1.6rem; font-size:0; text-indent:-999999px; background:url(/images/mo/ico_sns_share.png) center center no-repeat; background-size:contain; -webkit-transform:translateY(-50%); transform:translateY(-50%)}
-.dp .dp_exhibition .banner_item{margin-bottom:-5.3rem;}
-.dp .dp_exhibition .banner_item .dp_banner_slide{background-color:#fff;}
-.dp .dp_exhibition .dp_listItems_slide .swiper-container.item01 .swiper-slide{padding:0 14%}
-.dp .dp_exhibition .dp_listItems_slide .swiper-container.item01 .swiper-slide .item_prod .itemPercent{font-size:2.4rem;}
-.dp .dp_exhibition .dp_listItems_slide .swiper-container.item01 .swiper-slide .item_prod .itemName{font-size:1.3rem; max-height:3.5rem;}
-.dp .dp_exhibition .dp_listItems_wrap .list_content .itemsGrp{margin-bottom:-4rem;}
-.dp .dp_exhibition .dp_listItems_wrap .itemsGrp .item_prod:last-child{margin-bottom:0;}
-.dp .dp_exhibition .dp_banner_slide .swiper-container.dp_lookbook_case1{margin-top:6rem;}
-.dp .dp_exhibition .dp_listItems_wrap .btn_default{margin-top:4rem;}
-.dp .dp_exhibition .dp_listItems_wrap .btn_default:after{content:''; display:inline-block; margin-left:0.8rem; width:1.1rem; height:0.7rem; background:url(/images/mo/ico_btn_more.png) center center no-repeat; background-size:contain;}
-.dp .dp_exhibition .big_banner {position:relative; width:100%; height:131vw; background: url(/images/mo/thumb/detail_case_bg.png) center center no-repeat; background-size: cover;}
-.dp .dp_exhibition .big_banner .infoWrap{position:absolute; bottom:8vw; left:0; width:100%; padding:0 3vw;}
-.dp .dp_exhibition .big_banner .infoWrap .cnUrl{margin:0 -1.2vw; overflow:hidden;}
-.dp .dp_exhibition .big_banner .infoWrap .cnUrl > li{padding:2vw 1.2vw 0; float:left; width:50%; box-sizing:border-box;}
-.dp .dp_exhibition .big_banner .infoWrap .cnUrl > li a{display:block; padding:0 3vw; font-size:3.5vw; line-height:11vw; color:#fff; text-align:center; background-color:rgba(0,0,0,.6); white-space:nowrap;}
-.dp .dp_exhibition .big_banner .infoWrap .cnUrl > li a span{position:relative; display: block; padding-right:3.2vw; text-overflow:ellipsis; white-space:nowrap; overflow:hidden;}
-.dp .dp_exhibition .big_banner .infoWrap .cnUrl > li a span:after{content:''; display:inline-block; position:absolute; right:0; top:50%; width:2vw; height:3vw; background:url(/images/mo/ico_dpbanner_arrow.png) center center no-repeat; background-size:contain; vertical-align:middle; -webkit-transform:translateY(-50%); transform:translateY(-50%);}
-.dp .dp_exhibition .big_banner_slide .swiper-slide img{width:100%;}
-.dp .dp_exhibition .big_banner_slide .swiper-pagination{position:relative; margin:2.4rem 0 0; bottom:0;}
-.dp .dp_exhibition .big_banner_slide .swiper-pagination .swiper-pagination-bullet-active{background-color:#fd4802;}
-.dp .dp_exhibition .foot_banner_slide .swiper-container{overflow:initial;}
+.dp .dp_exhibition .inner.bg_gray{background-color:#f5f5f5;}*/
+.dp .dp_listItems_wrap .items_option{padding-top:4rem;}
+.dp .dp_listItems_wrap .items_option .select{display:block;}
+.dp .promotion_tit{position:relative; padding:2rem; margin-left:2rem}
+.dp .promotion_tit .p{font-size:1.4rem; color:#222; font-weight:500;}
+.dp .promotion_tit .sns_share{position:absolute; right:2rem; top:50%; width:1.4rem; height:1.6rem; font-size:0; text-indent:-999999px; background:url(/images/mo/ico_sns_share.png) center center no-repeat; background-size:contain; -webkit-transform:translateY(-50%); transform:translateY(-50%)}
+/*.dp .promotion_visual.type1{margin-bottom:-5.3rem;}*/
+.dp .promotion_visual.type1 .mid_banner{background-color:#fff;}
+.dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-slide{padding:0 14%}
+.dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-slide .item_prod .itemPercent{font-size:2.4rem;}
+.dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-slide .item_prod .itemName{font-size:1.3rem; max-height:3.5rem;}
+.dp .dp_listItems_wrap .list_content .itemsGrp{margin-bottom:-4rem;}
+.dp .dp_listItems_wrap .itemsGrp .item_prod:last-child{margin-bottom:0;}
+.dp .mid_banner .swiper-container.dp_lookbook_case1{margin-top:6rem;}
+.dp .dp_listItems_wrap .btn_default{margin-top:4rem;}
+.dp .dp_listItems_wrap .btn_default:after{content:''; display:inline-block; margin-left:0.8rem; width:1.1rem; height:0.7rem; background:url(/images/mo/ico_btn_more.png) center center no-repeat; background-size:contain;}
+.dp .promotion_visual.type1 .big_banner {position:relative; width:100%; height:131vw; background: url(/images/mo/thumb/detail_case_bg.png) center center no-repeat; background-size: cover;}
+.dp .promotion_visual.type1 .big_banner .infoWrap{position:absolute; bottom:8vw; left:0; width:100%; padding:0 3vw;}
+.dp .promotion_visual.type1 .big_banner .infoWrap .cnUrl{margin:0 -1.2vw; overflow:hidden;}
+.dp .promotion_visual.type1 .big_banner .infoWrap .cnUrl > li{padding:2vw 1.2vw 0; float:left; width:50%; box-sizing:border-box;}
+.dp .promotion_visual.type1 .big_banner .infoWrap .cnUrl > li a{display:block; padding:0 3vw; font-size:3.5vw; line-height:11vw; color:#fff; text-align:center; background-color:rgba(0,0,0,.6); white-space:nowrap;}
+.dp .promotion_visual.type1 .big_banner .infoWrap .cnUrl > li a span{position:relative; display: block; padding-right:3.2vw; text-overflow:ellipsis; white-space:nowrap; overflow:hidden;}
+.dp .promotion_visual.type1 .big_banner .infoWrap .cnUrl > li a span:after{content:''; display:inline-block; position:absolute; right:0; top:50%; width:2vw; height:3vw; background:url(/images/mo/ico_dpbanner_arrow.png) center center no-repeat; background-size:contain; vertical-align:middle; -webkit-transform:translateY(-50%); transform:translateY(-50%);}
+.dp .big_banner_slide .swiper-slide img{width:100%;}
+.dp .big_banner_slide .swiper-pagination{position:relative; margin:2.4rem 0 0; bottom:0;}
+.dp .big_banner_slide .swiper-pagination .swiper-pagination-bullet-active{background-color:#fd4802;}
+.dp .other_promotion_slide .swiper-container{overflow:initial;}
 /* dp_detail-case - 쿠폰 */
 .dp .coupon_list {margin-bottom:3rem;}
 .dp .coupon_list li {position: relative; position: relative; margin-top:3rem; overflow: hidden;}
@@ -1753,60 +1787,60 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .dp .coupon_list li.off .cp_date button span {background:none; padding-right: 0;}
 .dp .coupon_list li .cp_info {text-align: center; margin-top:1.3rem;}
 .dp .coupon_list li .cp_info button span {display: inline-block; border-bottom: 1px solid #888; font-size:1.1rem; color: #888;}
-.dp .dp_coupon_wrap .dp_coupon_list {display: flex; justify-content: center; flex-wrap: wrap; max-width: 1580px; min-width: 1580px; padding: 0 260px 120px; margin: 0 auto; box-sizing: border-box;}
-.dp .dp_coupon_wrap .dp_coupon_tip {max-width: 1580px; margin: 0 auto; padding: 60px 60px 0 60px; box-sizing: border-box; display: flex;  border-top: 1px solid #ddd;}
-.dp .dp_coupon_wrap .dp_coupon_tip .dp_coupon_notice::before {content:''; display: block; width:36px; height: 46px; margin: 0 auto; background: url(/images/pc/ico_null.png)no-repeat;}
-.dp .dp_coupon_wrap .dp_coupon_tip .dp_coupon_notice::after {content:'유의사항'; display: inline-block; margin-top: 20px; color:#888;}
-.dp .dp_coupon_wrap .dp_coupon_tip ul {margin-left: 90px;}
-.dp .dp_coupon_wrap .dp_coupon_tip ul li {position: relative; padding-left: 1.2rem; margin-bottom: 1.2rem; color:#888;}
-.dp .dp_coupon_wrap .dp_coupon_tip ul li:last-child {margin-bottom: 0;}
-.dp .dp_coupon_wrap .dp_coupon_tip ul li::before {content:''; position: absolute; width:2px; height: 2px; top:46%; left:0; transform: scaleY(-50%); background: #888;}
-.dp .dp_coupon_wrap .announce_txt {position: relative; margin: 0 auto; padding-top: 30px; border-top:1px solid #dddddd;}
-.dp .dp_coupon_wrap .announce_txt .note_txt p{color:#666;}
-.dp .dp_coupon_wrap .announce_txt .announce_list{padding-bottom:2.7rem; padding-top:1rem;}
+.dp .dp_coupon .dp_coupon_list {display: flex; justify-content: center; flex-wrap: wrap; max-width: 1580px; min-width: 1580px; padding: 0 260px 120px; margin: 0 auto; box-sizing: border-box;}
+.dp .dp_coupon .dp_coupon_tip {max-width: 1580px; margin: 0 auto; padding: 60px 60px 0 60px; box-sizing: border-box; display: flex;  border-top: 1px solid #ddd;}
+.dp .dp_coupon .dp_coupon_tip .dp_coupon_notice::before {content:''; display: block; width:36px; height: 46px; margin: 0 auto; background: url(/images/pc/ico_null.png)no-repeat;}
+.dp .dp_coupon .dp_coupon_tip .dp_coupon_notice::after {content:'유의사항'; display: inline-block; margin-top: 20px; color:#888;}
+.dp .dp_coupon .dp_coupon_tip ul {margin-left: 90px;}
+.dp .dp_coupon .dp_coupon_tip ul li {position: relative; padding-left: 1.2rem; margin-bottom: 1.2rem; color:#888;}
+.dp .dp_coupon .dp_coupon_tip ul li:last-child {margin-bottom: 0;}
+.dp .dp_coupon .dp_coupon_tip ul li::before {content:''; position: absolute; width:2px; height: 2px; top:46%; left:0; transform: scaleY(-50%); background: #888;}
+.dp .dp_coupon .announce_txt {position: relative; margin: 0 auto; padding-top: 30px; border-top:1px solid #dddddd;}
+.dp .dp_coupon .announce_txt .note_txt p{color:#666;}
+.dp .dp_coupon .announce_txt .announce_list{padding-bottom:2.7rem; padding-top:1rem;}
 /* dp_detail-case - 리뷰 */
-.dp .dp_exhibition .dp_review{text-align:center;}
-.dp .dp_exhibition .dp_listItems_wrap .btn{width:100%;}
-.dp .dp_exhibition .dp_listItems_slide .swiper-container.item01 .swiper-pagination{position:relative; margin:2.4rem 0 0; bottom:0;}
-.dp .dp_exhibition .dp_listItems_slide .swiper-container.item01 .swiper-pagination .swiper-pagination-bullet-active{background-color:#fd4802;}
-.dp .dp_exhibition .dp_listItems_slide .swiper-container.item02{overflow: initial;}
-.dp .dp_exhibition .dp_banner_slide .swiper-container.dp_lookbook_case1 .swiper-pagination{position:relative; margin:2.4rem 0 0; bottom:0;}
-.dp .dp_exhibition .dp_banner_slide .swiper-container.dp_lookbook_case1 .swiper-pagination-bullet-active{background-color:#fd4802;}
-.dp .dp_exhibition .review .swiper-container{overflow: initial;}
-.dp .dp_exhibition .review .swiper-container .swiper-slide > div{border:1px solid #eee;}
-.dp .dp_exhibition .review .best_review {position:relative; text-align:center;}
-.dp .dp_exhibition .review .best_review:after{content:''; display:block; position:absolute; bottom:0; left:2rem; right:2rem; height:1px; background-color:#eee;}
-.dp .dp_exhibition .review .best_review a {display:block; position:relative; background-color:#fff;}
-.dp .dp_exhibition .review .best_review a .info .star_score .star {display:inline-block; position:relative; width:83px; height:1.4rem; background:#ddd;}
-.dp .dp_exhibition .review .best_review a .info .star_score .star::after {content:''; position:absolute; left:0; top:0; z-index:3; width:100%; height:1.5rem; background:url('/images/mo/star_empty.png') no-repeat 0 0; background-size:100% 100%; image-rendering:pixelated;}
-.dp .dp_exhibition .review .best_review a .info .star_score .star .progbar {display:inline-block; height:1.4rem; background:#fd4802; vertical-align:top;}
-.dp .dp_exhibition .review .best_review a .info .star_score .ico {margin-left:1.0rem}
-.dp .dp_exhibition .review .best_review a .info .star_score .ico::before {vertical-align:inherit;}
-.dp .dp_exhibition .review .best_review a .info .star_score{margin-bottom:1rem;}
-.dp .dp_exhibition .review .best_review a .info .star_score .star{vertical-align:middle;}
-.dp .dp_exhibition .review .best_review a .info .txt_best_review p{height:5.5rem; overflow:hidden; line-height:1.6; color:#666; font-size:1.3rem; font-weight:200; display:-webkit-box; text-overflow:ellipsis; -webkit-line-clamp:3; -webkit-box-orient:vertical;}
-.dp .dp_exhibition .review .best_review a .info .txt_best_review p{font-size:1.2rem; color:#666;  display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; white-space: normal; overflow-wrap: break-word;}
-.dp .dp_exhibition .review .best_review a .pic{position:relative;}
-.dp .dp_exhibition .review .best_review a .pic .thumb {display:block; padding-top:100%; background-repeat:no-repeat; background-position:50% 50%; background-size:cover;}
-.dp .dp_exhibition .review .best_review a .pic .thumb.mov::after {content:''; position:absolute; left:0; top:0; width:100%; height:100%; background:rgba(0,0,0,0.3) url('/images/mo/ico_play.png') no-repeat 50% 50%; z-index:2;}
-.dp .dp_exhibition .review .best_review a .info{padding:2rem; text-align:left;}
-.dp .dp_exhibition .review .best_review a .info .writer {margin-top:1.3rem;}
-.dp .dp_exhibition .review .best_review a .info .writer span {position:relative; margin-left:1.1rem; padding-left:1.1rem; color:#888; font-size:1.1rem;}
-.dp .dp_exhibition .review .best_review a .info .writer span::after {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); height:8px; width:1px; background:#ddd;}
-.dp .dp_exhibition .review .best_review a .info .writer span:first-child {margin-left:0; padding-left:0}
-.dp .dp_exhibition .review .best_review a .info .writer span:first-child::after {display:none;}
-.dp .dp_exhibition .review .product_view{padding:2rem; background-color:#fff;}
-.dp .dp_exhibition .review .product_view .item_prod {text-align:left;}
-.dp .dp_exhibition .review .product_view .item_prod .item_state {position: relative; display:table; width:100%; box-sizing: border-box;}
-.dp .dp_exhibition .review .product_view .item_prod .itemLink{position: relative; display:table-cell; width: 100%; height:60px; padding-left:56px; vertical-align: middle;}
-.dp .dp_exhibition .review .product_view .item_prod .item_state .itemLink .itemPic {position:absolute; left:0; top:0; padding: 0; width:40px; height:60px; z-index:2;}
-.dp .dp_exhibition .review .product_view .item_prod .item_state .itemLink .itemBrand {display:block; font-size:1rem; color:#888888; font-weight:300; margin-left:0; margin-right:0;}
-.dp .dp_exhibition .review .product_view .item_prod .item_state .itemLink .itemName {display:block; margin-top:0.5rem; font-size:1.3rem; max-height: 3.3rem; margin-left:0; margin-right:0; display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 1; -webkit-box-orient: vertical; max-height: 3.3rem; overflow: hidden; white-space: normal; overflow-wrap: break-word;}
-.dp .dp_exhibition .review .product_view .item_prod .item_state .itemLink .itemPrice{margin-left:0; margin-right:0;}
-.dp .dp_exhibition .review .product_view .item_prod .item_state .itemLink .itemPrice .itemPrice_sale{font-weight:700;}
-.dp .dp_exhibition .review .swiper-container .swiper-slide{box-shadow:0 0 1.0rem rgba(0,0,0,0.2);}
-.dp .dp_exhibition .review .swiper-container .swiper-pagination-fraction {position: relative; display:inline-block; margin-top:2rem; bottom:0; width:auto; background: rgba(34,34,34,.5); color: #fff; font-weight: 300; padding:0.5rem 0.7rem; line-height: 1; font-size: 1.2rem; border-radius:2rem;}
-.dp .dp_exhibition .review .swiper-container .swiper-pagination-current {font-weight: 600;}
+.dp .dp_review_cont .dp_review{text-align:center;}
+.dp .dp_listItems_wrap .btn{width:100%;}
+.dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-pagination{position:relative; margin:2.4rem 0 0; bottom:0;}
+.dp .dp_listItems_cont.type1 .swiper-container.item01 .swiper-pagination .swiper-pagination-bullet-active{background-color:#fd4802;}
+.dp .dp_listItems_cont.type1 .swiper-container.item02{overflow: initial;}
+.dp .mid_banner .swiper-container.dp_lookbook_case1 .swiper-pagination{position:relative; margin:2.4rem 0 0; bottom:0;}
+.dp .mid_banner .swiper-container.dp_lookbook_case1 .swiper-pagination-bullet-active{background-color:#fd4802;}
+.dp .dp_review_cont .review .swiper-container{overflow: initial;}
+.dp .dp_review_cont .review .swiper-container .swiper-slide > div{border:1px solid #eee;}
+.dp .dp_review_cont .review .best_review {position:relative; text-align:center;}
+.dp .dp_review_cont .review .best_review:after{content:''; display:block; position:absolute; bottom:0; left:2rem; right:2rem; height:1px; background-color:#eee;}
+.dp .dp_review_cont .review .best_review a {display:block; position:relative; background-color:#fff;}
+.dp .dp_review_cont .review .best_review a .info .star_score .star {display:inline-block; position:relative; width:83px; height:1.4rem; background:#ddd;}
+.dp .dp_review_cont .review .best_review a .info .star_score .star::after {content:''; position:absolute; left:0; top:0; z-index:3; width:100%; height:1.5rem; background:url('/images/mo/star_empty.png') no-repeat 0 0; background-size:100% 100%; image-rendering:pixelated;}
+.dp .dp_review_cont .review .best_review a .info .star_score .star .progbar {display:inline-block; height:1.4rem; background:#fd4802; vertical-align:top;}
+.dp .dp_review_cont .review .best_review a .info .star_score .ico {margin-left:1.0rem}
+.dp .dp_review_cont .review .best_review a .info .star_score .ico::before {vertical-align:inherit;}
+.dp .dp_review_cont .review .best_review a .info .star_score{margin-bottom:1rem;}
+.dp .dp_review_cont .review .best_review a .info .star_score .star{vertical-align:middle;}
+.dp .dp_review_cont .review .best_review a .info .txt_best_review p{height:5.5rem; overflow:hidden; line-height:1.6; color:#666; font-size:1.3rem; font-weight:200; display:-webkit-box; text-overflow:ellipsis; -webkit-line-clamp:3; -webkit-box-orient:vertical;}
+.dp .dp_review_cont .review .best_review a .info .txt_best_review p{font-size:1.2rem; color:#666;  display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; white-space: normal; overflow-wrap: break-word;}
+.dp .dp_review_cont .review .best_review a .pic{position:relative;}
+.dp .dp_review_cont .review .best_review a .pic .thumb {display:block; padding-top:100%; background-repeat:no-repeat; background-position:50% 50%; background-size:cover;}
+.dp .dp_review_cont .review .best_review a .pic .thumb.mov::after {content:''; position:absolute; left:0; top:0; width:100%; height:100%; background:rgba(0,0,0,0.3) url('/images/mo/ico_play.png') no-repeat 50% 50%; z-index:2;}
+.dp .dp_review_cont .review .best_review a .info{padding:2rem; text-align:left;}
+.dp .dp_review_cont .review .best_review a .info .writer {margin-top:1.3rem;}
+.dp .dp_review_cont .review .best_review a .info .writer span {position:relative; margin-left:1.1rem; padding-left:1.1rem; color:#888; font-size:1.1rem;}
+.dp .dp_review_cont .review .best_review a .info .writer span::after {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); height:8px; width:1px; background:#ddd;}
+.dp .dp_review_cont .review .best_review a .info .writer span:first-child {margin-left:0; padding-left:0}
+.dp .dp_review_cont .review .best_review a .info .writer span:first-child::after {display:none;}
+.dp .dp_review_cont .review .product_view{padding:2rem; background-color:#fff;}
+.dp .dp_review_cont .review .product_view .item_prod {text-align:left;}
+.dp .dp_review_cont .review .product_view .item_prod .item_state {position: relative; display:table; width:100%; box-sizing: border-box;}
+.dp .dp_review_cont .review .product_view .item_prod .itemLink{position: relative; display:table-cell; width: 100%; height:60px; padding-left:56px; vertical-align: middle;}
+.dp .dp_review_cont .review .product_view .item_prod .item_state .itemLink .itemPic {position:absolute; left:0; top:0; padding: 0; width:40px; height:60px; z-index:2;}
+.dp .dp_review_cont .review .product_view .item_prod .item_state .itemLink .itemBrand {display:block; font-size:1rem; color:#888888; font-weight:300; margin-left:0; margin-right:0;}
+.dp .dp_review_cont .review .product_view .item_prod .item_state .itemLink .itemName {display:block; margin-top:0.5rem; font-size:1.3rem; max-height: 3.3rem; margin-left:0; margin-right:0; display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 1; -webkit-box-orient: vertical; max-height: 3.3rem; overflow: hidden; white-space: normal; overflow-wrap: break-word;}
+.dp .dp_review_cont .review .product_view .item_prod .item_state .itemLink .itemPrice{margin-left:0; margin-right:0;}
+.dp .dp_review_cont .review .product_view .item_prod .item_state .itemLink .itemPrice .itemPrice_sale{font-weight:700;}
+.dp .dp_review_cont .review .swiper-container .swiper-slide{box-shadow:0 0 1.0rem rgba(0,0,0,0.2);}
+.dp .dp_review_cont .review .swiper-container .swiper-pagination-fraction {position: relative; display:inline-block; margin-top:2rem; bottom:0; width:auto; background: rgba(34,34,34,.5); color: #fff; font-weight: 300; padding:0.5rem 0.7rem; line-height: 1; font-size: 1.2rem; border-radius:2rem;}
+.dp .dp_review_cont .review .swiper-container .swiper-pagination-current {font-weight: 600;}
 
 /* .dp > .dp_util > select 커스텀 (전시공통) */
 .dp .dp_util .select {cursor: pointer;display: inline-block;position: relative;top:-1px; font-size: 1.2rem;color: #333333;width: 100%;height:1.6rem; line-height:1.6rem;}
@@ -1976,11 +2010,11 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .modal.dp_pop.bulletShip_pop .impossible-popup{text-align:center;}
 /* dp_Bulletship .Bulletship_body */
 .Bulletship_head img{width:100%;}
-.dp_Bulletship .ico-area {width:4.1rem; padding-top:4rem; margin:0 auto;}
-.dp_Bulletship .txt-area {position:relative; margin-top:1rem; text-align:center;}
-.dp_Bulletship .bulltetship-time {font-size:1.3rem; color:#555;}
-.dp_Bulletship .bulltetship-check {margin:1.2rem 0 2rem; font-size:2.4rem; font-weight:900;}
-.dp_Bulletship .bulltetship-disc {margin:1.6rem 0 0; font-size:1.1rem;}
+.bulletship .ico-area {width:4.1rem; padding-top:4rem; margin:0 auto;}
+.bulletship .txt-area {position:relative; margin-top:1rem; text-align:center;}
+.bulletship .bulltetship-time {font-size:1.3rem; color:#555;}
+.bulletship .bulltetship-check {margin:1.2rem 0 2rem; font-size:2.4rem; font-weight:900;}
+.bulletship .bulltetship-disc {margin:1.6rem 0 0; font-size:1.1rem;}
 /* popup */
 .bulletship-possible {display:block; z-index:100; top:0; left:0; width:100%; background-color:#fff;}
 .bulletship-possible.no {display:block; z-index:100;}
@@ -2007,38 +2041,37 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .mo-list-btn:checked,
 .mo-list-btn:hover {border-color:#fd4802; color:#fd4802;}
 /* dp_Bulletship .Bulletship_foot */
-.dp_Bulletship .Bulletship_foot {background-color:#f5f5f5;}
-.dp_Bulletship .Bulletship_foot .inner.custom-inner {padding-bottom:0;}
-.dp_Bulletship .Bulletship_foot ul li {display:flex;}
-.dp_Bulletship .Bulletship_foot ul li + li {margin:1.5rem 0;}
-.dp_Bulletship .Bulletship_foot .img-box {margin-right:2rem;}
-.dp_Bulletship .Bulletship_foot img {width:7.5rem; height:7.5rem;}
-.dp_Bulletship .Bulletship_foot .txt-box {display:flex; flex-wrap:wrap; flex-direction:column; align-content:flex-start; justify-content:center; text-align:left;}
-.dp_Bulletship .Bulletship_foot .tit {font-size:1.4rem; font-weight:900;}
-.dp_Bulletship .Bulletship_foot .disc {font-size:1.2rem;}
+.bulletship .Bulletship_foot {background-color:#f5f5f5;}
+.bulletship .Bulletship_foot .inner.custom-inner {padding-bottom:0;}
+.bulletship .Bulletship_foot ul li {display:flex;}
+.bulletship .Bulletship_foot ul li + li {margin:1.5rem 0;}
+.bulletship .Bulletship_foot .img-box {margin-right:2rem;}
+.bulletship .Bulletship_foot img {width:7.5rem; height:7.5rem;}
+.bulletship .Bulletship_foot .txt-box {display:flex; flex-wrap:wrap; flex-direction:column; align-content:flex-start; justify-content:center; text-align:left;}
+.bulletship .Bulletship_foot .tit {font-size:1.4rem; font-weight:900;}
+.bulletship .Bulletship_foot .disc {font-size:1.2rem;}
 .mo-only {display:none;}
 @media (max-width:320px) {
     .mo-only {display:block;}
 }
-.dp_Bulletship .bullet-styicky_nav {margin:4rem 0;}
-.dp_Bulletship .item_header {text-align:center;}
-.dp_Bulletship .item_header h4 {font-size:1.6rem; font-weight:900;}
-.dp_Bulletship .itemGrp {display:flex;}
-.dp_Bulletship .itemGrp .mo-item_prod {margin-bottom:4rem;}
-.dp_Bulletship .itemGrp .itemName {text-transform:uppercase;}
-.dp_Bulletship .itemGrp .itemPrice {font-size:1rem; text-decoration:line-through}
-.dp_Bulletship .itemGrp .salePrice {display:flex; justify-content:space-between; align-content:center; margin:0 .5rem; font-size:1.5rem; font-weight:900;}
-.dp_Bulletship .itemGrp .itemBadge {display:flex; align-items:center;}
-.dp_Bulletship .itemGrp .itemBadge .badge13 {font-size:.9rem;}
-.dp_Bulletship .itemGrp .itemBadge .badge13 + .badge13 {margin:0 .4rem;}
-.dp_Bulletship .itemGrp .itemcolorchip {max-width:100%; margin:1rem 0 2rem;}
-.dp_Bulletship .items_option{padding-top:4rem;}
-.dp_Bulletship .items_option .select{display:block;}
-.dp .dp_Bulletship{background-color:#f5f5f5;}
-.dp .dp_Bulletship .inner{padding-bottom: 4rem; margin-bottom: 1.3rem; background-color:#fff; }
-.dp .dp_Bulletship .inner:last-child{margin-top:1.3rem;}
-.dp .dp_Bulletship .inner.bg_gray{background-color:#f5f5f5;}
-.dp .dp_Bulletship .dp_subtitle{padding-top:4rem;}
+.dp .bullet-styicky_nav {margin:4rem 0;}
+.dp .item_header {text-align:center;}
+.dp .item_header h4 {font-size:1.6rem; font-weight:900;}
+.dp .itemGrp {display:flex;}
+.dp .itemGrp .mo-item_prod {margin-bottom:4rem;}
+.dp .itemGrp .itemName {text-transform:uppercase;}
+.dp .itemGrp .itemPrice {font-size:1rem; text-decoration:line-through}
+.dp .itemGrp .salePrice {display:flex; justify-content:space-between; align-content:center; margin:0 .5rem; font-size:1.5rem; font-weight:900;}
+.dp .itemGrp .itemBadge {display:flex; align-items:center;}
+.dp .itemGrp .itemBadge .badge13 {font-size:.9rem;}
+.dp .itemGrp .itemBadge .badge13 + .badge13 {margin:0 .4rem;}
+.dp .itemGrp .itemcolorchip {max-width:100%; margin:1rem 0 2rem;}
+.bulletship .items_option{padding-top:4rem;}
+.bulletship .items_option .select{display:block;}
+/*.dp .dp_Bulletship{background-color:#f5f5f5;}*/
+/*.dp .dp_Bulletship .inner{padding-bottom: 4rem; margin-bottom: 1.3rem; background-color:#fff;}*/
+/*.dp .dp_Bulletship .inner:last-child{margin-top:1.3rem;}*/
+/*.dp .dp_Bulletship .inner.bg_gray{background-color:#f5f5f5;}*/
 
 
 /*===================== item_prod쪽으로 이동 예정===================*/

+ 122 - 106
src/main/webapp/ux/mo/css/style24_m.css

@@ -534,6 +534,14 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .renew_check_tit .share_btn {position: absolute; top: 14px; right: 20px; width: 1.4rem;}
 .ev textarea, .ev input {color: #222;}
 
+.promotion_tit {padding:1.5rem 0;}
+.promotion_tit h3 {font-size: 1.4rem; font-weight: 500;}
+.promotion_tit .period {margin-top: 1.5rem; font-size: 1.1rem; color: #888;}
+.promotion_tit .share_btn {position: absolute; top: 0.9rem; right: 1.5rem; width: 3rem; height: 3rem;}
+.promotion_tit .share_btn img {width: 1.4rem;}
+.dp textarea, .dp input {color: #222;}
+.dp .promotion_tit {margin-bottom: -1.2rem;}
+
 /* ev_안내사항_공통 */
 .announce_txt {position: relative; padding-top: 2.5rem;}
 .announce_txt .note_txt {position: relative;}
@@ -577,34 +585,38 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .event_list .list .nodata .txt_box a {display: inline-block; padding: 1rem 1.2rem; border:1px solid #a7a7a7; font-size: 1.1rem; color: #222; font-weight: 300;}
 
 /* ev_renew_1 */
-.ev .renew {background: #f5f5f5;}
-.ev .renew .inner {padding-bottom: 0; background: #fff;}
-.ev .renew .inner:last-child {padding-bottom: 0;}
-.ev .renew_banner img {width: 100%; height:auto;}
-.ev .renew .btn_wrap {padding:3rem 0; border-bottom: 1px solid #ddd; text-align: center;}
-.ev .renew .btn_wrap a.btn {background: #fd4802; width: 100%; padding:1.5rem 0; height:auto; font-size: 1.2rem; color: #fff; font-weight: 500; border:none;}
-.ev .renew .btn_wrap a.btn span {position: relative;}
-.ev .renew .btn_wrap a.btn span:after {content:''; position: absolute; top: 50%; right: -13px; transform:translateY(-50%); background:url(/images/mo/ico_more_arrow.png) no-repeat center/100%; width: 0.53rem; height: 9px;}
-.ev .announce_txt {margin-bottom: 1.2rem;}
-
-/* ev_다른 이벤트 보기 슬라이드 */
-.ev .other_ev_slide {position: relative; padding-top: 6rem; padding-bottom: 4rem;}
-.ev .other_ev_slide .tit {position: relative; margin-bottom: 2rem; text-align: center;}
-.ev .other_ev_slide .tit h4 {font-size: 1.6rem; font-weight: 500;}
-.ev .other_ev_slide .tit a {position: absolute; top: 50%; right: 0; transform:translateY(-50%); padding-right: 20px; background: url(/images/pc/ico_more_lg.png) no-repeat right top 1px; font-size: 18px; color:#888;}
+.dp .promotion_visual {margin-bottom: -1.2rem;}
+.dp {background: #f5f5f5;}
+.dp .inner {padding-bottom: 0; background: #fff;}
+.dp .inner:last-child {padding-bottom: 0;}
+.dp .dp_btn_area .btn_wrap {padding:3rem 0; border-bottom: 1px solid #ddd; text-align: center;}
+.dp .dp_btn_area.type2 .btn_wrap {border: none;}
+.dp .dp_btn_area .btn_wrap a.btn {width: 100%; padding:1.5rem 0; height:auto; font-size: 1.2rem; color: #fff; font-weight: 500; border:none;}
+.dp .dp_btn_area .btn_wrap a.btn span {position: relative;}
+.dp .dp_btn_area .btn_wrap a.btn span:after {content:''; position: absolute; top: 50%; right: -1.3rem; transform:translateY(-50%); background:url(/images/mo/ico_more_arrow.png) no-repeat center/100%; width: 0.53rem; height: 0.9rem; display: none;}
+.dp .dp_btn_area .btn_wrap a.btn.go_next span:after {display: block;}
+.dp .dp_btn_area .btn_wrap button.btn {width: 100%; padding:1.5rem 0; height:auto; font-size: 1.2rem; color: #fff; font-weight: 500; border:none;}
+.dp .announce_txt {margin-top:-1.2rem; padding:2.4rem 0;}
+.dp .announce_txt .announce_list {padding-bottom: 0;}
+
+/* 다른 이벤트 보기 슬라이드 */
+.other_promotion_slide {position: relative; padding-top: 6rem; padding-bottom: 4rem;}
+.other_promotion_slide .tit {position: relative; margin-bottom: 2rem; text-align: center;}
+.other_promotion_slide .tit h4 {font-size: 1.6rem; font-weight: 500;}
+.other_promotion_slide .tit a {position: absolute; top: 50%; right: 0; transform:translateY(-50%); padding-right: 20px; background: url(/images/pc/ico_more_lg.png) no-repeat right top 1px; font-size: 18px; color:#888;}
 /* .ev .other_ev_slide .swiper-container {overflow:visible;} */
-.ev .other_ev_slide .swiper-slide {width: 42%;}
-.ev .other_ev_slide .swiper-slide img {width: 100%; height:auto;}
-.ev .other_ev_slide .swiper-slide .txt {}
-.ev .other_ev_slide .swiper-slide .txt .subject {margin:1.6rem 0 0; padding:0 0.46rem; font-size: 1.2rem; line-height: 1.6; font-weight: 300; color:#222; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: -webkit-box; word-break: keep-all;}
-.ev .other_ev_slide .swiper-button-next:after, .ev .other_ev_slide .swiper-button-prev:after {content:'';}
-.ev .other_ev_slide .swiper-button-next {background: url(/images/pc/slide_next.png) no-repeat center; right: 70px; opacity: 0.6; margin-top: -10px;}
-.ev .other_ev_slide .swiper-button-prev {background: url(/images/pc/slide_prev.png) no-repeat center; left: 70px; opacity: 0.6; margin-top: -10px;}
+.other_promotion_slide .swiper-slide {width: 42%;}
+.other_promotion_slide .swiper-slide img {width: 100%; height:auto;}
+.other_promotion_slide .swiper-slide .txt {}
+.other_promotion_slide .swiper-slide .txt .subject {margin:1.6rem 0 0; padding:0 0.46rem; font-size: 1.2rem; line-height: 1.6; font-weight: 300; color:#222; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: -webkit-box; word-break: keep-all;}
+.other_promotion_slide .swiper-button-next:after, .other_promotion_slide .swiper-button-prev:after {content:'';}
+.other_promotion_slide .swiper-button-next {background: url(/images/pc/slide_next.png) no-repeat center; right: 70px; opacity: 0.6; margin-top: -10px;}
+.other_promotion_slide .swiper-button-prev {background: url(/images/pc/slide_prev.png) no-repeat center; left: 70px; opacity: 0.6; margin-top: -10px;}
 
 /* ev_renew_2 */
 .ev .survey_wrap {background: #f5f5f5;}
 .ev .survey_wrap .survey_con {width: 100%; margin:0 auto; border-top: 1px solid #ddd;}
-.ev .survey_wrap .survey_con .survey_row {background: #fff; padding: 3rem 2rem; margin-bottom: 20px;}
+.ev .survey_wrap .survey_con .survey_row {background: #fff; padding: 3rem 2rem; margin-bottom: 2rem;}
 .ev .survey_wrap .survey_con .survey_row:last-child {border-bottom: 0;}
 .ev .survey_wrap .survey_con .survey_row h4 {margin-bottom: 2rem; font-size: 1.33rem; line-height: 1.5; font-weight: 500; position: relative; padding-left: 2.5rem;}
 .ev .survey_wrap .survey_con .survey_row h4:before {position: absolute; top: 0; left: 0;}
@@ -635,43 +647,47 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .survey_wrap .survey_con .btn_wrap button.btn {width: 100%; padding:1.6rem 0; font-size: 1.4rem; font-weight: 500; height:auto;} 
 
 /* ev_comment_1 */
-.ev .comment {background: #f5f5f5;}
-.ev .comment .inner::after {content:''; clear:none;}
-.ev .comment .inner:last-child {padding-bottom: 0;}
-.ev .comment .input_wrap {width: 100%;}
-.ev .comment .comment_textarea {padding:0 2rem;}
-.ev .comment .cmt_thumb {padding:0 2rem;}
-.ev .comment .cmt_thumb .imgUpload {margin:0 -1%;}
-.ev .comment .doc_contactus {width: 100%; height: 15rem; padding: 1.5rem; margin:3rem 0 1rem;}
-.ev .comment .doc_ans {width: 100%; height: 15rem; padding: 20px; font-size: 1.3rem; line-height: 1.6; color: #888; font-weight: 300; resize:none;}
-.ev .comment .txt_cnt {position: absolute; right: 1.6rem; bottom: 1.6rem; margin-top: 0;}
-.ev .comment .txt_cnt {position: absolute; right: 1.6rem; bottom: 1.6rem; margin-top: 0; color: #888;}
-.ev .comment .form_field {display: block; margin:0 -1% 0;}
-.ev .comment .form_field .img_file {margin:0 -0.4rem 0;}
-.ev .comment .form_field .img_file .imgUpload:after {content:''; clear:both; display: block;}
-.ev .comment .pics {overflow:hidden; /*width: calc((100% - 3.2rem) /4);*/ width: 23%; margin:1%; height:auto; padding-top: 23%; border:none; background: #f5f5f5;}
-.ev .comment .picsThumbs {max-width:100%; max-height:none; width: 100%; height:auto;}
+.dp {background: #f5f5f5;}
+.dp .inner {background: #fff; padding-bottom: 0; margin-bottom:1.2rem;}
+.dp .inner::after {content:''; clear:none;}
+.dp .inner:last-child {padding-bottom: 0;}
+.cmt_wrap {background: #f5f5f5;}
+.cmt_wrap .cmt_write {background: #fff;}
+.cmt_wrap .cmt_group {background: #fff;}
+.cmt_wrap .input_wrap {width: 100%;}
+.cmt_wrap .comment_textarea {padding:0 2rem;}
+.cmt_wrap .cmt_thumb {padding:0 2rem;}
+.cmt_wrap .cmt_thumb .imgUpload {margin:0 -1%;}
+.cmt_wrap .doc_contactus {width: 100%; height: 15rem; padding: 1.5rem; margin:3rem 0 1rem;}
+.cmt_wrap .doc_ans {width: 100%; height: 15rem; padding: 20px; font-size: 1.3rem; line-height: 1.6; color: #888; font-weight: 300; resize:none;}
+.cmt_wrap .txt_cnt {position: absolute; right: 1.6rem; bottom: 1.6rem; margin-top: 0;}
+.cmt_wrap .txt_cnt {position: absolute; right: 1.6rem; bottom: 1.6rem; margin-top: 0; color: #888;}
+.cmt_wrap .form_field {display: block; margin:0 -1% 0;}
+.cmt_wrap .form_field .img_file {margin:0 -0.4rem 0;}
+.cmt_wrap .form_field .img_file .imgUpload:after {content:''; clear:both; display: block;}
+.cmt_wrap .pics {overflow:hidden; /*width: calc((100% - 3.2rem) /4);*/ width: 23%; margin:1%; height:auto; padding-top: 23%; border:none; background: #f5f5f5;}
+.cmt_wrap .picsThumbs {max-width:100%; max-height:none; width: 100%; height:auto;}
 /* .ev .comment .imgUpload {width: 100%; height:100%;} */
-.ev .comment .fileAdd {float:left; width: 23%; height:auto; padding-top: 23%; margin:1%;}
-.ev .comment .btn_wrap {padding:2rem 2rem 3rem;}
-.ev .comment .btn_wrap button.btn {width: 100%; padding:1.1rem 0; font-size: 1.4rem; font-weight: 500; height:auto;}
-.ev .comment .nodata {padding:14rem 0; font-size: 1.3rem; color: #888; text-align: center;}
-
-.ev .cmt_group {padding-top: 4rem; margin-top: 1.2rem; margin-bottom: 1.2rem;}
-.ev .cmt_group .cmt_list_tit {padding:0 2rem;}
-.ev .cmt_group .cmt_list_tit strong {margin-right: 0.8rem; font-size: 1.6rem; font-weight: 500;}
-.ev .cmt_group .cmt_list_tit span {font-size: 1.6rem; color: #666; font-weight: 200;}
-.ev .cmt_group .cmt_list li {padding: 2.66rem 2rem; border-bottom: 1px solid #ddd;}
-.ev .cmt_group .cmt_list li .cmt_top {margin-bottom: 1.8rem; position: relative; font-size: 0;}
-.ev .cmt_group .cmt_list li .cmt_top .writer {margin-right: 1.2rem; padding-right: 1.2rem; border-right:1px solid #ddd; font-size: 1.1rem; color: #666;}
-.ev .cmt_group .cmt_list li .cmt_top .date {color: #888; font-size: 1.1rem;}
-.ev .cmt_group .cmt_list li .cmt_cont .img_wrap {margin:0 -0.4rem 0.8rem; white-space: nowrap; font-size: 0; overflow-x: auto; -ms-overflow-style:none;}
-.ev .cmt_group .cmt_list li .cmt_cont .img_wrap::-webkit-scrollbar { display:none; }
-.ev .cmt_group .cmt_list li .cmt_cont .img_wrap .pics {float:none; display: inline-block !important; margin:0 0.1.11%; width: 20.55%; padding-top: 20%;}
-.ev .cmt_group .cmt_list li .cmt_cont .img_wrap .pics .picsThumbs {}
-.ev .cmt_group .cmt_list li .cmt_cont .img_wrap img {max-width:100%; max-height:100%;}
-.ev .cmt_group .cmt_list li .cmt_cont p {color: #666; line-height: 1.7; font-size: 1.3rem; font-weight: 300;}
-.ev .cmt_group .cmt_list li .btn_del {display: block; font-size: 1.1rem; color: #666; font-weight: 300; position: absolute; top: 0; right: 0; height:auto; padding:0; border-color:transparent; border-bottom: 1px solid #666;}
+.cmt_wrap .fileAdd {float:left; width: 23%; height:auto; padding-top: 23%; margin:1%;}
+.cmt_wrap .btn_wrap {padding:2rem 2rem 3rem;}
+.cmt_wrap .btn_wrap button.btn {width: 100%; padding:1.1rem 0; font-size: 1.4rem; font-weight: 500; height:4.5rem;}
+.cmt_wrap .nodata {padding:14rem 0; font-size: 1.3rem; color: #888; text-align: center;}
+
+.dp .cmt_group {padding-top: 4rem; margin-top: 1.2rem; margin-bottom: 1.2rem;}
+.dp .cmt_group .cmt_list_tit {padding:0 2rem;}
+.dp .cmt_group .cmt_list_tit strong {margin-right: 0.8rem; font-size: 1.6rem; font-weight: 500;}
+.dp .cmt_group .cmt_list_tit span {font-size: 1.6rem; color: #666; font-weight: 200;}
+.dp .cmt_group .cmt_list li {padding: 2.66rem 2rem; border-bottom: 1px solid #ddd;}
+.dp .cmt_group .cmt_list li .cmt_top {margin-bottom: 1.8rem; position: relative; font-size: 0;}
+.dp .cmt_group .cmt_list li .cmt_top .writer {margin-right: 1.2rem; padding-right: 1.2rem; border-right:1px solid #ddd; font-size: 1.1rem; color: #666;}
+.dp .cmt_group .cmt_list li .cmt_top .date {color: #888; font-size: 1.1rem;}
+.dp .cmt_group .cmt_list li .cmt_cont .img_wrap {margin:0 -0.4rem 0.8rem; white-space: nowrap; font-size: 0; overflow-x: auto; -ms-overflow-style:none;}
+.dp .cmt_group .cmt_list li .cmt_cont .img_wrap::-webkit-scrollbar { display:none; }
+.dp .cmt_group .cmt_list li .cmt_cont .img_wrap .pics {float:none; display: inline-block !important; margin:0 0.1.11%; width: 20.55%; padding-top: 20%;}
+.dp .cmt_group .cmt_list li .cmt_cont .img_wrap .pics .picsThumbs {}
+.dp .cmt_group .cmt_list li .cmt_cont .img_wrap img {max-width:100%; max-height:100%;}
+.dp .cmt_group .cmt_list li .cmt_cont p {color: #666; line-height: 1.7; font-size: 1.3rem; font-weight: 300;}
+.dp .cmt_group .cmt_list li .btn_del {display: block; font-size: 1.1rem; color: #666; font-weight: 300; position: absolute; top: 0; right: 0; height:auto; padding:0; border-color:transparent; border-bottom: 1px solid #666;}
 
 /* ev_comment_1 포토댓글 */
 .modal.pop_full .modal-header {padding:1.6rem 2rem;}
@@ -679,8 +695,8 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .modal.pop_full a.close-modal {background: url('/images/mo/ico_pop_cls.png') no-repeat center/100%; width: 1.6rem; height: 1.6rem;}
 .modal.photo_comment_popup {background: #f5f5f5; overflow:hidden; position: fixed; left: 0; top: 0;}
 .modal.photo_comment_popup .modal-dialog, .modal.photo_comment_popup .modal-content {height: 100%;}
-.modal.photo_comment_popup .modal-body {padding: 5.2rem 0 0; margin:0; height: 100%;}
-.modal.photo_comment_popup .modal-body .pop_cont {height: 100%; overflow:hidden; position: relative; padding-bottom: 13rem;}
+.modal.photo_comment_popup .modal-body {padding: 0 0; margin:0; height: 100%;}
+.modal.photo_comment_popup .modal-body .pop_cont {max-height:none; height: 100vh; height: calc(var(--vh, 1vh) * 100); overflow:hidden; position: relative; padding-bottom: 13rem; padding-top: 5.2rem;}
 .modal.photo_comment_popup .modal-body .pop_cont .pop_slide {position: relative; height: 100%; overflow:hidden;}
 .modal.photo_comment_popup .modal-body .pop_cont .pop_slide .swiper-container {height: 100%;}
 .modal.photo_comment_popup .modal-body .pop_cont .pop_slide .swiper-pagination-fraction {bottom:2.5rem; width:auto; left: 50%; transform:translateX(-50%); background: rgba(34,34,34,.5); color: #fff; font-weight: 300;padding:0.5rem 0.7rem; line-height: 1; font-size: 1.2rem; border-radius:2rem;}
@@ -713,52 +729,52 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .paging_wrap .pageNav li img {width: 0.53rem; height:0.9rem;}
 
 /* ev_check */
-.ev .check {background: #f5f5f5;}
-.ev .event_calander {position: relative; background-color: #f4f3ef; padding:4.3rem 2rem 3rem; overflow:hidden;}
-.ev .event_calander:after {content:''; position: absolute; top: 12rem; left: -3rem; background:url('/images/mo/bg_check01.png'); background-size: 100%; width: 12.5rem; height: 84.1rem; z-index: 1;}
-.ev .event_calander:before {content:''; position: absolute; top: 0; right: 0; background:url('/images/mo/bg_check02.png'); background-size: 100%; width: 12.5rem; height: 84.1rem; z-index: 1;}
-.ev .event_calander .check_title {position: relative; z-index: 2; text-align: center;}
-.ev .event_calander .check_title p {font-size: 1.4rem; font-weight: 200; margin-bottom: 2rem;}
-.ev .event_calander .check_title h3 {font-size: 4rem; font-weight: 600;}
-.ev .event_calander .check_title h3 strong {color: #fd4802;}
-.ev .event_calander .check_info {margin:3rem 0.6rem 1.5rem; text-align: right; position: relative; z-index: 11; font-size: 0;}
-.ev .event_calander .check_info span {position: relative; font-size: 1.2rem; padding-left: 1.2rem;}
-.ev .event_calander .check_info span:after {content:''; position: absolute; top: 50%; left: 0; transform:translateY(-50%); width: 0.7rem; height: 0.7rem; border-radius:50%;}
-.ev .event_calander .check_info span.today {margin-right: 1.4rem;}
-.ev .event_calander .check_info span.today:after {background: #fff; border:1px solid #fd4802;}
-.ev .event_calander .check_info span.complete:after {background: #fa8d64; border:1px solid #fa8d64;}
-
-.ev .event_calander .my_attend_day {background: #222; position: relative; padding:1.5rem; overflow:hidden;}
-.ev .event_calander .my_attend_day p {font-size: 1.6rem; font-weight: 300; color: #fff; }
-.ev .event_calander .my_attend_day span.day {position: absolute; top: 1.5rem; right: 1.5rem; font-size: 1.6rem; color: #fff; font-weight: 300;}
-.ev .event_calander .my_attend_day span.day span {color: #ff6b47; font-weight: 600;}
-.ev .event_calander .tbl_wrap, .ev .event_calander .btn_wrap {position: relative; z-index: 3;}
-.ev .event_calander .tbl_wrap {padding:0 0.6rem;}
-.ev .event_calander .month_txt {padding-left: 15px; margin-bottom: 35px;}
-.ev .event_calander .month_txt .kor_t {font-size: 42px; color: #000; font-weight: 600; margin-right: 16px;}
-.ev .event_calander .month_txt .eng_t {font-size: 20px; color: #888; font-weight: 500; text-transform: uppercase;}
-.ev .event_calander table {box-sizing: border-box; width: 100%; border:1px solid #222;}
-.ev .event_calander table th {background: #fff; padding:15px 0; font-size: 0.9rem; color: #222; font-weight: 300; box-sizing: border-box;}
+/* .ev .check {background: #f5f5f5;} */
+.stamp_event .event_calander {position: relative; background-color: #f4f3ef; padding:4.3rem 2rem 3rem; overflow:hidden;}
+.stamp_event .event_calander:after {content:''; position: absolute; top: 12rem; left: -3rem; background:url('/images/mo/bg_check01.png'); background-size: 100%; width: 12.5rem; height: 84.1rem; z-index: 1;}
+.stamp_event .event_calander:before {content:''; position: absolute; top: 0; right: 0; background:url('/images/mo/bg_check02.png'); background-size: 100%; width: 12.5rem; height: 84.1rem; z-index: 1;}
+.stamp_event .event_calander .check_title {position: relative; z-index: 2; text-align: center;}
+.stamp_event .event_calander .check_title p {font-size: 1.4rem; font-weight: 200; margin-bottom: 2rem;}
+.stamp_event .event_calander .check_title h3 {font-size: 4rem; font-weight: 600;}
+.stamp_event .event_calander .check_title h3 strong {color: #fd4802;}
+.stamp_event .event_calander .check_info {margin:3rem 0.6rem 1.5rem; text-align: right; position: relative; z-index: 11; font-size: 0;}
+.stamp_event .event_calander .check_info span {position: relative; font-size: 1.2rem; padding-left: 1.2rem;}
+.stamp_event .event_calander .check_info span:after {content:''; position: absolute; top: 50%; left: 0; transform:translateY(-50%); width: 0.7rem; height: 0.7rem; border-radius:50%;}
+.stamp_event .event_calander .check_info span.today {margin-right: 1.4rem;}
+.stamp_event .event_calander .check_info span.today:after {background: #fff; border:1px solid #fd4802;}
+.stamp_event .event_calander .check_info span.complete:after {background: #fa8d64; border:1px solid #fa8d64;}
+
+.stamp_event .event_calander .my_attend_day {background: #222; position: relative; padding:1.5rem; overflow:hidden;}
+.stamp_event .event_calander .my_attend_day p {font-size: 1.6rem; font-weight: 300; color: #fff; }
+.stamp_event .event_calander .my_attend_day span.day {position: absolute; top: 1.5rem; right: 1.5rem; font-size: 1.6rem; color: #fff; font-weight: 300;}
+.stamp_event .event_calander .my_attend_day span.day span {color: #ff6b47; font-weight: 600;}
+.stamp_event .event_calander .tbl_wrap, .stamp_event .event_calander .btn_wrap {position: relative; z-index: 3;}
+.stamp_event .event_calander .tbl_wrap {padding:0 0.6rem;}
+.stamp_event .event_calander .month_txt {padding-left: 15px; margin-bottom: 35px;}
+.stamp_event .event_calander .month_txt .kor_t {font-size: 42px; color: #000; font-weight: 600; margin-right: 16px;}
+.stamp_event .event_calander .month_txt .eng_t {font-size: 20px; color: #888; font-weight: 500; text-transform: uppercase;}
+.stamp_event .event_calander table {box-sizing: border-box; width: 100%; border:1px solid #222;}
+.stamp_event .event_calander table th {background: #fff; padding:15px 0; font-size: 0.9rem; color: #222; font-weight: 300; box-sizing: border-box;}
 /* .ev .event_calander table th.sun {color: #fd4802;}
-.ev .event_calander table th.sat {color: #3158ea;} */
-.ev .event_calander table td {height: 4rem; box-sizing: border-box; text-align: center;}
-.ev .event_calander table td .date {font-size: 1rem; font-weight: 300; width: 2.7rem; height: 2.7rem; line-height: 2.7rem; border-radius:50%; margin:0 auto;}
-.ev .event_calander table td .date.unused {color: #ddd;}
-.ev .event_calander table td.today .date {border:1px solid #fd4802;}
-.ev .event_calander table td.complete .date {border:1px solid #fa8d64; background: #fa8d64;}
-.ev .event_calander table tbody {background: #fff; }
-.ev .event_calander .btn_wrap {margin:2rem 0 0; text-align: center;}
-.ev .event_calander .btn_wrap button {padding:1.2rem 0; height:auto; width: 100%; font-size: 1.4rem; font-weight: 500; background: #fd4802; border:none;}
-.ev .benefit_list {padding-top: 3rem;}
-.ev .benefit_list h4 {font-size: 1.6rem; padding-bottom: 2rem;}
-.ev .benefit_list .benefit_con img {width: 100%;}
-.ev .benefit_list .benefit_con ul li:first-child {margin-top: 0;}
-.ev .benefit_list .benefit_con ul li {background: #f5f5f5; margin-top: 0.1rem; font-size: 1.4rem;}
-.ev .benefit_list .benefit_con ul li > div {padding:2.6rem 0 2.6rem 6.5rem;}
-.ev .benefit_list .benefit_con ul li .benfit_point {background: url(/images/mo/ico_check_point.png) no-repeat left 2rem center; background-size:3.5rem;}
-.ev .benefit_list .benefit_con ul li .benfit_coupon {background: url(/images/mo/ico_check_coupon.png) no-repeat left 2rem center; background-size:3.5rem;}
-.ev .benefit_list .benefit_con ul li > div strong {font-weight: 500;}
-.ev .benefit_list .benefit_con ul li > div span.c_primary {font-weight: 600;}
+.event_calander table th.sat {color: #3158ea;} */
+.stamp_event .event_calander table td {height: 4rem; box-sizing: border-box; text-align: center;}
+.stamp_event .event_calander table td .date {font-size: 1rem; font-weight: 300; width: 2.7rem; height: 2.7rem; line-height: 2.7rem; border-radius:50%; margin:0 auto;}
+.stamp_event .event_calander table td .date.unused {color: #ddd;}
+.stamp_event .event_calander table td.today .date {border:1px solid #fd4802;}
+.stamp_event .event_calander table td.complete .date {border:1px solid #fa8d64; background: #fa8d64;}
+.stamp_event .event_calander table tbody {background: #fff; }
+.stamp_event .event_calander .btn_wrap {margin:2rem 0 0; text-align: center;}
+.stamp_event .event_calander .btn_wrap button {padding:1.2rem 0; height:auto; width: 100%; font-size: 1.4rem; font-weight: 500; background: #fd4802; border:none;}
+.stamp_event .event_benefit {padding: 3rem 2rem 0;}
+.stamp_event .event_benefit h4 {font-size: 1.6rem; padding-bottom: 2rem;}
+.stamp_event .event_benefit .benefit_con img {width: 100%;}
+.stamp_event .event_benefit .benefit_con ul li:first-child {margin-top: 0;}
+.stamp_event .event_benefit .benefit_con ul li {background: #f5f5f5; margin-top: 0.1rem; font-size: 1.4rem;}
+.stamp_event .event_benefit .benefit_con ul li > div {padding:2.6rem 0 2.6rem 6.5rem;}
+.stamp_event .event_benefit .benefit_con ul li .benfit_point {background: url(/images/mo/ico_check_point.png) no-repeat left 2rem center; background-size:3.5rem;}
+.stamp_event .event_benefit .benefit_con ul li .benfit_coupon {background: url(/images/mo/ico_check_coupon.png) no-repeat left 2rem center; background-size:3.5rem;}
+.stamp_event .event_benefit .benefit_con ul li > div strong {font-weight: 500;}
+.stamp_event .event_benefit .benefit_con ul li > div span.c_primary {font-weight: 600;}
 
 
 /* ev_rank */

+ 44 - 7
src/main/webapp/ux/plugins/gaga/gaga.summernote.js

@@ -35,7 +35,7 @@ var gagaSn = {
 		if (typeof(type) == 'undefined' || type == 'default') {
 			return [
 				['style', ['style']],
-				['Font Style', ['fontname']],
+				//['Font Style', ['fontname']], <!-- 210309 삭제 -->
 				['fontsize', ['fontsize']],
 				['height', ['height']],
 				['style', ['bold', 'italic', 'underline','clear']],
@@ -50,7 +50,7 @@ var gagaSn = {
 		} else if (type == 'media') {
 			return [
 				['style', ['style']],
-				['Font Style', ['fontname']],
+				//['Font Style', ['fontname']], <!-- 210309 삭제 -->
 				['fontsize', ['fontsize']],
 				['height', ['height']],
 				['style', ['bold', 'italic', 'underline','clear']],
@@ -79,15 +79,26 @@ var gagaSn = {
 			placeholder: '내용을 입력하세요',
 			height: editorHeight, //에디터 기본 높이
 			lang : 'ko-KR', //기본 언어 인코딩
-			fontNames: ['Malgun Gothic', 'HY견고딕', 'Helvetica', 'Verdana', 'Arial', 'Arial Black'], //폰트 스타일
-			fontNamesIgnoreCheck: ['Malgun Gothic'], //기본폰트 스타일
+			//fontNames: ['Malgun Gothic', 'HY견고딕', 'Helvetica', 'Verdana', 'Arial', 'Arial Black'], //폰트 스타일  <!-- 210309 삭제 -->
+			//fontNamesIgnoreCheck: ['Malgun Gothic'], //기본폰트 스타일  <!-- 210309 삭제 -->
+			fontNames: ['Noto Sans kr'], //폰트 스타일  <!-- 210309 수정 -->
+			fontNamesIgnoreCheck: ['Noto Sans kr'], //기본폰트 스타일  <!-- 210309 수정 -->
 			focus: false, //로드시 에디터창에 포커싱
 			fontSizes: ['8','9','10','11','12','13','14','15','16','17','18','19','20','24','30','36'],
 			toolbar: toolbarOptions,
 			callbacks: {
-				onImageUpload: function(files, editor, welEditable) { //이미지 업로드
-					for (var i = files.length - 1; i >= 0; i--) {
-						sendFile(files[i], this);
+				onImageUpload: function(files) { // 이미지 업로드
+					for (var i = 0; i < files.length; i++) {
+						uploadImage(files[i], this);
+					}
+				},
+				onPaste: function(e) {
+					var clipboardData = e.originalEvent.clipboardData;
+					if (clipboardData && clipboardData.items && clipboardData.items.length) {
+						var item = clipboardData.items[0];
+						if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
+							e.preventDefault();
+						}
 					}
 				}
 			}
@@ -105,6 +116,32 @@ var gagaSn = {
 		} catch(e) {
 			// Do nothing
 		}
+	},
+	
+	uploadImage : function(file, editorId) {
+		var formData = new FormData();
+		formData.append("file", file);
+		formData.append("policy", image);
+		
+		$.ajax({
+			data : formData,
+			type : 'POST',
+			url : '/common/file/upload?subDir=/editor',
+			cache : false,
+			contentType : false,
+			enctype : 'multipart/form-data',
+			processData : false,
+			success : function(data) {
+				console.log("================== EDITOR FILE UPLOAD ===================");
+				console.log("viewUrl : " + data.viewUrl);
+				console.log("viewPath : " + data.viewPath);
+				console.log("oldFileNm : " + data.oldFileNm);
+				console.log("newFileNm : " + data.newFileNm);
+				console.log("filePath : " + data.filePath);
+				console.log("================== // EDITOR FILE UPLOAD ===================");
+				$(editorId).summernote('insertImage', data.viewPath);
+			}
+		});
 	}
 
 }

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

@@ -11,6 +11,7 @@ const _PAGE_CATE_MAIN = _frontUrl + "/display/category/main/form";		// 카테고
 const _PAGE_BRAND_MAIN = _frontUrl + "/display/brand/main/form";		// 브랜드메인
 const _PAGE_CATE_GOODS_LIST = _frontUrl + "/display/category/goods/list/form";	// 카테고리 상품목록
 const _PAGE_BEST_MAIN = _frontUrl + "/display/best/main/form";		// 베스트메인
+const _PAGE_OUTLET_MAIN = _frontUrl + "/display/outlet/main/form";		// 아울렛메인
 
 //== 고객 ==/
 const _PAGE_CUSTOMER_JOIN_TYPE = _frontUrl + "/customer/join/type/form";							// 고객 > 회원가입 유형
@@ -1021,6 +1022,24 @@ var cfnGoToCategoryMain = function(cateGb, cate1No, brandGroupNo) {
 	cfnGoToPage(_PAGE_CATE_MAIN + params);
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 아울렛메인 페이지로 이동
+ * <pre>
+ *		cfnGoToOutletMain('G032_103', 1713);
+ * </pre>
+ * @param  : cateGb - 카테고리구분. 필수
+ * @param  : cate1No - 카테고리1번호. 필수
+ * @since  : 2021/04/20
+ * @author : bin2107
+ */
+var cfnGoToOutletMain = function(cateGb, cate1No) {
+	var params = '?cateGb=' + cateGb + '&cate1No=' + cate1No;
+	// if (typeof (brandGroupNo) != 'undefined') params += '&brandGroupNo=' + brandGroupNo;
+	cfnGoToPage(_PAGE_OUTLET_MAIN + params);
+}
+
 /**
  * @type   : function
  * @access : public