Преглед на файлове

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

xodud lee преди 5 години
родител
ревизия
e76ac62497
променени са 33 файла, в които са добавени 508 реда и са изтрити 180 реда
  1. 26 2
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  2. 111 0
      src/main/java/com/style24/front/biz/web/TsfAppController.java
  3. 0 53
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  4. 7 1
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  5. 1 0
      src/main/java/com/style24/persistence/domain/GoodsCompose.java
  6. 7 13
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  7. 12 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  8. 7 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  9. 56 0
      src/main/webapp/WEB-INF/views/mob/app/NoticeFormMob.html
  10. 19 10
      src/main/webapp/WEB-INF/views/mob/app/SettingFormMob.html
  11. 140 1
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  12. 16 16
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html
  13. 18 18
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  14. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreCancelDetailFormMob.html
  15. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreReturnDetailFormMob.html
  16. 3 3
      src/main/webapp/WEB-INF/views/mob/mypage/MypageDeliveryInfoFormMob.html
  17. 3 3
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  18. 12 3
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html
  19. 2 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html
  20. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageWishListFormMob.html
  21. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCreCancelDetailFormMob.html
  22. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCreReturnDetailFormMob.html
  23. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberDeliveryInfoFormMob.html
  24. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberOrderDetailFormMob.html
  25. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberOrderListInfoMob.html
  26. 24 8
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  27. 11 11
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  28. 13 13
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  29. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  30. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreReturnDetailFormWeb.html
  31. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreCancelDetailFormWeb.html
  32. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCreReturnDetailFormWeb.html
  33. 4 1
      src/main/webapp/ux/style24_link.js

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

@@ -32,6 +32,8 @@ import com.style24.persistence.domain.searchengine.SearchEngine;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 전시 Service
  *
@@ -366,9 +368,31 @@ public class TsfDisplayService {
 	 * @author eskim
 	 * @date 2021. 3. 30
 	 */
-	public Collection<Popup> getPopupList(Popup popup) {
+	public GagaMap getPopupList(Popup popup) {
+		GagaMap result = new GagaMap();
+		Collection<Popup> popupList = new ArrayList<Popup>();
 		popup.setSiteCd(TscConstants.Site.STYLE24.value());
-		return displayDao.getPopupList(popup);
+		
+		if ("P".equals(popup.getFrontGb())) {
+			result.set("dataList", displayDao.getPopupList(popup));
+		}else {
+			//우선순위 full 팝
+			popup.setPopupGb("F");
+			popupList = displayDao.getPopupList(popup);
+			result.set("popupGb", "F");
+			result.set("dataList", popupList);
+			if (popupList != null && popupList.size() > 0) {
+				return result;
+			}
+			popup.setPopupGb("H");
+			popupList = displayDao.getPopupList(popup);
+			result.set("popupGb", "H");
+			result.set("dataList", popupList);
+		}
+		
+		// Collection<Popup>
+		
+		return result;
 	}
 
 	/**

+ 111 - 0
src/main/java/com/style24/front/biz/web/TsfAppController.java

@@ -0,0 +1,111 @@
+package com.style24.front.biz.web;
+
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.env.TscConstants;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.front.biz.service.TsfCustomerService;
+import com.style24.front.support.controller.TsfBaseController;
+import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.Customer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * 앱 관련 Controller
+ *
+ * @author jsshin
+ * @since 2021. 05. 21
+ */
+@Controller
+@RequestMapping("/app")
+@Slf4j
+public class TsfAppController extends TsfBaseController {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private TsfCustomerService customerService;
+
+	@Autowired
+	private TscEnvsetService envsetService;
+
+
+	/**
+	 * 앱 설정 화면
+	 *
+	 * @author jsshin
+	 * @since 2020. 5. 11
+	 */
+	@GetMapping("/setting/form")
+	public ModelAndView getSettingForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 정책에 등록된 앱버전
+		if (TsfSession.getAttribute("osType").equals("I")) {
+			mav.addObject("regAppVersion",envsetService.getIosAppVersion(TscConstants.Site.STYLE24.value()));
+		} else if (TsfSession.getAttribute("osType").equals("A")) {
+			mav.addObject("regAppVersion",envsetService.getAosAppVersion(TscConstants.Site.STYLE24.value()));
+		}
+
+		// 앱푸시수신동의 가져오기
+		mav.addObject("appAgreeYn", customerService.getAppAgreeYn());
+		mav.addObject("appMkAgreeYn", customerService.getAppMkAgreeYn());
+		mav.addObject("isLogin", TsfSession.isLogin());
+		mav.setViewName("mob/app/SettingFormMob");
+		return mav;
+	}
+
+	/**
+	 * 앱푸시 수신동의
+	 *
+	 * @param  customer - 수신동의 여부
+	 * @author jsshin
+	 * @since 2021. 05. 20
+	 */
+	@PostMapping("/appagree/update")
+	@ResponseBody
+	public GagaResponse updateAppAgreeYn(@RequestBody Customer customer) {
+		customerService.updateAppAgreeYn(customer.getAppAgreeYn());
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
+
+	/**
+	 * 앱마케팅 수신동의
+	 *
+	 * @param  customer - 수신동의 여부
+	 * @author jsshin
+	 * @since 2021. 05. 20
+	 */
+	@PostMapping("/mkagree/update")
+	@ResponseBody
+	public GagaResponse updateMkAgreeYn(@RequestBody Customer customer) {
+		customerService.updateMkAgreeYn(customer.getMkAgreeYn());
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
+
+
+		/**
+	 * 앱 설정 화면
+	 *
+	 * @author jsshin
+	 * @since 2020. 5. 11
+	 */
+	@GetMapping("/notice/form")
+	public ModelAndView getNoticeForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("isLogin", TsfSession.isLogin());
+		mav.setViewName("mob/app/NoticeFormMob");
+
+		return mav;
+	}
+}

+ 0 - 53
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -2,7 +2,6 @@ package com.style24.front.biz.web;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import javax.websocket.server.PathParam;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -984,56 +983,4 @@ public class TsfCustomerController extends TsfBaseController {
 		return super.ok(message.getMessage("SUCC_0004"));
 	}
 
-	/**
-	 * 모바일 설정 화면
-	 *
-	 * @author jsshin
-	 * @since 2020. 5. 11
-	 */
-	@GetMapping("/setting/form")
-	public ModelAndView getSettingForm() {
-		ModelAndView mav = new ModelAndView();
-
-		// 정책에 등록된 앱버전
-		if (TsfSession.getAttribute("osType").equals("I")) {
-			mav.addObject("regAppVersion","1.0");
-		} else if (TsfSession.getAttribute("osType").equals("A")) {
-			mav.addObject("regAppVersion","1.0");
-		}
-
-		// 앱푸시수신동의 가져오기
-		mav.addObject("appAgreeYn", customerService.getAppAgreeYn());
-		mav.addObject("appMkAgreeYn", customerService.getAppMkAgreeYn());
-
-		mav.setViewName("mob/customer/SettingFormMob");
-		return mav;
-	}
-
-	/**
-	 * 앱푸시 수신동의
-	 *
-	 * @param  customer - 수신동의 여부
-	 * @author jsshin
-	 * @since 2021. 05. 20
-	 */
-	@PostMapping("/appagree/update")
-	@ResponseBody
-	public GagaResponse updateAppAgreeYn(@RequestBody Customer customer) {
-		customerService.updateAppAgreeYn(customer.getAppAgreeYn());
-		return super.ok(message.getMessage("SUCC_0004"));
-	}
-
-	/**
-	 * 앱마케팅 수신동의
-	 *
-	 * @param  customer - 수신동의 여부
-	 * @author jsshin
-	 * @since 2021. 05. 20
-	 */
-	@PostMapping("/mkagree/update")
-	@ResponseBody
-	public GagaResponse updateMkAgreeYn(@RequestBody Customer customer) {
-		customerService.updateMkAgreeYn(customer.getMkAgreeYn());
-		return super.ok(message.getMessage("SUCC_0004"));
-	}
 }

+ 7 - 1
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -570,7 +570,10 @@ public class TsfDisplayController extends TsfBaseController {
 	 */
 	@GetMapping("/popup/list")
 	@ResponseBody
-	public Collection<Popup> getPopupList(@RequestParam HashMap<String, String> paramMap) {
+	public GagaMap getPopupList(@RequestParam HashMap<String, String> paramMap) {
+		
+		GagaMap result = new GagaMap();
+		 
 		Popup popup = new Popup();
 		popup.setFrontGb(TsfSession.getFrontGb());
 		popup.setViewPage(paramMap.get("viewPage"));
@@ -581,6 +584,9 @@ public class TsfDisplayController extends TsfBaseController {
 		popup.setPlanSq((StringUtils.isBlank(paramMap.get("planSq").toString()) ? 0 : Integer.parseInt(paramMap.get("planSq"))));
 		popup.setPreview(paramMap.get("preview"));
 		popup.setViewDt(paramMap.get("viewDt"));
+		
+		//result.set("dataList", displayService.getPopupList(popup));
+	
 		return displayService.getPopupList(popup);
 	}
 

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

@@ -43,6 +43,7 @@ public class GoodsCompose extends TscBaseDomain {
 	private String brandGroupNm;
 	private String selfGoodsYn;
 	private String supplyCompCd;
+	private int stockQty;
 
 	//private Collection<Coupon> goodsCouponList;
 	private Collection<GoodsStock> goodsOption1List;

+ 7 - 13
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -960,7 +960,6 @@
 		     , Z.CPN_CNT                               /*보유쿠폰수*/
 		     , Z.EXPIRE_YN                             /*만료여부*/
 		     , GROUP_CONCAT(Z.TGT_CONDITION) AS TGT_CONDITION
-		     , Z.CUST_CPN_SQ
 		FROM
 		(
 		WITH TAB_COUPON AS (
@@ -988,7 +987,6 @@
 		         , CC.AVAIL_EDDT                      /*유효종료일자*/
 		         , CC.CPN_CNT                         /*보유쿠폰수*/
 		         , CC.EXPIRE_YN                       /*만료여부*/
-		         , CC.CUST_CPN_SQ 
 		    FROM   (
 		            SELECT CC.CPN_ID
 		                 , DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i') AS AVAIL_STDT  /*유효시작일자*/
@@ -997,7 +995,6 @@
 		                 , MAX(CASE WHEN NOW() > CC.AVAIL_EDDT THEN 'Y'
 		                            ELSE 'N'
 		                       END)                              AS EXPIRE_YN /*만료여부*/
-		                 , MAX(CC.CUST_CPN_SQ) AS CUST_CPN_SQ
 		            FROM   TB_CUST_COUPON CC
 		            WHERE  1 = 1
 		            GROUP  BY CC.CPN_ID, DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i'), DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i')
@@ -1021,10 +1018,9 @@
 		                WHEN CR.CPN_TARGET = 'G260_13' /*업체*/ THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')
 		           END AS REF_VAL
 		         , RANK() OVER(PARTITION BY CR.CPN_ID, CR.CPN_TARGET ORDER BY REF_VAL) AS RK
-		    FROM   TAB_COUPON C
-		         , TB_COUPON_REFVAL CR
-		    WHERE  C.CPN_ID = CR.CPN_ID
-		    AND    CR.CPN_TARGET != 'G260_14' /*제외상품아닌넘*/
+		    FROM   TAB_COUPON C LEFT OUTER JOIN TB_COUPON_REFVAL CR
+		             ON  C.CPN_ID = CR.CPN_ID
+		    WHERE    CR.CPN_TARGET != 'G260_14' /*제외상품아닌넘*/
 		)
 		, TAB_COUPON_REFVAL2 AS (
 		    SELECT CPN_ID
@@ -1061,11 +1057,9 @@
 		                              WHEN CR.CPN_TARGET = 'G260_13' AND CR.CNT > 1 THEN ' 외'
 		                              ELSE ''
 		                         END) AS TGT_CONDITION /*대상조건*/
-		     , C.CUST_CPN_SQ
-		FROM   TAB_COUPON C
-		     , TAB_COUPON_REFVAL2 CR
-		WHERE  C.CPN_ID = CR.CPN_ID
-		AND C.CPN_ID = #{cpnId}
+		FROM   TAB_COUPON C LEFT OUTER JOIN TAB_COUPON_REFVAL2 CR
+		            ON  C.CPN_ID = CR.CPN_ID
+		WHERE C.CPN_ID = #{cpnId}
 		ORDER  BY C.EXPIRE_YN, C.AVAIL_EDDT
 		)Z
 		GROUP BY  Z.CPN_ID                                /*쿠폰ID*/
@@ -1080,7 +1074,7 @@
 		        , Z.AVAIL_EDDT                            /*유효종료일자*/
 		        , Z.CPN_CNT                               /*보유쿠폰수*/
 		        , Z.EXPIRE_YN                             /*만료여부*/
-		        , Z.CUST_CPN_SQ
+		ORDER BY CPN_ID LIMIT 1
 	</select>
 	
 	<select id="getPlanCouponDetailInfo" resultType="Coupon" parameterType="Coupon">

+ 12 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -542,6 +542,7 @@
 		         , IMG_URL1
 		         , LINK_URL1
 		         , UNEXP_DAYS
+		         , LINK_TARGET
 		         , ROW_NUMBER() OVER( ORDER BY DISP_ORD, REG_DT DESC) AS RNUM
 		    <choose>
 		         <when test='preview != null and preview == "Y"'>
@@ -552,11 +553,17 @@
 		         </otherwise>
 		    </choose>
 		    WHERE  1 = 1
-		    AND ( FRONT_GB = 'A'
-		    <if test='frontGb != null and frontGb !=""'>
-		          OR FRONT_GB = #{frontGb}
+		    <choose>
+		    <when test='frontGb != null and frontGb =="P"'>
+		    AND FRONT_GB = #{frontGb}
+		    </when>
+		    <otherwise>
+		    AND FRONT_GB = 'M'
+		    </otherwise>
+		    </choose>
+		    <if test="popupGb != null and popupGb != ''">
+		    AND POPUP_GB = #{popupGb}
 		    </if>
-		         )
 		    AND ( VIEW_PAGE = 'G037_10'
 		    <if test='viewPage != null and viewPage !=""'>
 		          OR ( VIEW_PAGE = #{viewPage}
@@ -584,7 +591,7 @@
 		    AND DISP_EDDT >= NOW()
 		    </otherwise>
 		    </choose>
-		    ORDER BY DISP_ORD, REG_DT DESC
+		    ORDER BY POPUP_GB, DISP_ORD, REG_DT DESC
 		) Z 
 	</select>
 	

+ 7 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -849,6 +849,7 @@
 		     , Z.RF_TMTB2_AMT
 		     , Z.RF_GOODS_CPN_AMT
 		     , Z.RF_CART_CPN_AMT
+		     , Z.RF_DELV_CPN_AMT
 		     , Z.RF_PNT_AMT
 		     , Z.RF_PRE_PNT_AMT
 		     , Z.RF_GFCD_USE_AMT
@@ -904,6 +905,7 @@
 		             , R.RF_TMTB2_AMT
 		             , R.RF_GOODS_CPN_AMT
 		             , R.RF_CART_CPN_AMT
+		             , R.RF_DELV_CPN_AMT
 		             , R.RF_PNT_AMT
 		             , R.RF_PRE_PNT_AMT
 		             , R.RF_GFCD_USE_AMT
@@ -969,8 +971,8 @@
 				, Z.CHG_STAT_NM, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
 				, Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 				, Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT, Z.RF_CPN1_AMT, Z.RF_TMTB1_AMT
-				, Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
-				, Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_TID, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM
+				, Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_DELV_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT
+				, Z.RF_CNCL_AMT, Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_TID, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>
 
@@ -1018,6 +1020,7 @@
 		     , Z.RF_TMTB2_AMT
 		     , Z.RF_GOODS_CPN_AMT
 		     , Z.RF_CART_CPN_AMT
+		     , Z.RF_DELV_CPN_AMT
 		     , Z.RF_PNT_AMT
 		     , Z.RF_PRE_PNT_AMT
 		     , Z.RF_GFCD_USE_AMT
@@ -1081,6 +1084,7 @@
 		             , R.RF_TMTB2_AMT
 		             , R.RF_GOODS_CPN_AMT
 		             , R.RF_CART_CPN_AMT
+		             , R.RF_DELV_CPN_AMT
 		             , R.RF_PNT_AMT
 		             , R.RF_PRE_PNT_AMT
 		             , R.RF_GFCD_USE_AMT
@@ -1152,7 +1156,7 @@
 		        , Z.CHG_STAT_NM, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
 		        , Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 		        , Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT, Z.RF_CPN1_AMT, Z.RF_TMTB1_AMT
-		        , Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
+		        , Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_DELV_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
 		        , Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM, Z.WD_GB, Z.CHGER_NM, Z.CHGER_PHNNO, Z.CHGER_BASE_ADDR
 		        , Z.CHGER_DTL_ADDR, Z.CHGER_RTN_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM
 		 ORDER BY Z.ORD_CHG_SQ DESC

+ 56 - 0
src/main/webapp/WEB-INF/views/mob/app/NoticeFormMob.html

@@ -0,0 +1,56 @@
+<!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/AppLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : NoticeFormMob.html
+ * @desc    : 알림함 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.21   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main class="container app-only">
+	<!-- ★ 컨텐츠 시작 -->
+	<section class="notice">
+		<!--<section class="notice nodata">--><!-- 데이터 없을 경우, .nodata 추가 -->
+			<!-- 컨텐츠 추가 시, .inner 반복합니다 -->
+			<div class="inner">
+				<a href="javascript:void(0);">
+					<dl>
+						<dt class="tit">쇼핑백 미구매 상품</dt>
+						<dd class="cont_txt">쇼핑백에 아직도 구매하지 않은 상품이 있습니다. 스타일24를 방문하여 상품을 확인해주세요.</dd>
+						<dd class="cont_img"><img src="/images/mo/thumb/thumb_notice1.jpg" alt="공지 이미지 예제 1"></dd>
+						<dd class="cont_data"><span>2021.03.08</span></dd>
+					</dl>
+				</a>
+			</div>
+			<div class="inner">
+				<a href="javascript:void(0);">
+					<dl>
+						<dt class="tit">한파주의! 지금 입으면 딱 좋은 상품 모음 한파주의! 지금 입으면 딱 좋은 상품 모음  긴글 예제  긴글 예제  긴글 예제</dt>
+						<dd class="cont_txt">(광고) 올 겨울 필수템! 롱패딩 기획전! 지금 확인해 보세요. (광고) 올 겨울 필수템! 롱패딩 기획전! 지금 확인해 보세요. 긴글 예제 긴글 예제</dd>
+						<dd class="cont_data"><span>2021.03.08</span></dd>
+					</dl>
+				</a>
+			</div>
+	</section>
+	<!-- ★ 컨텐츠 종료 -->
+</main>
+<script th:inline="javascript">
+	$(document).ready(function(){
+		$('#htopTitle').text('알림함');
+	});
+</script>
+
+</th:block>
+</body>
+</html>

+ 19 - 10
src/main/webapp/WEB-INF/views/mob/customer/SettingFormMob.html → src/main/webapp/WEB-INF/views/mob/app/SettingFormMob.html

@@ -3,7 +3,6 @@
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
 	layout:decorator="mob/common/layout/AppLayoutMob">
-
 <!--
  *******************************************************************************
  * @source  : SettingFormMob.html
@@ -52,7 +51,7 @@
 							<div class="setItems">
 								<span class="set_opt">알림함</span>
 								<div class="alink">
-									<a href="javascript:void(0);"></a>
+									<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_APP_NOTICE);"></a>
 								</div>
 							</div>
 						</dd>
@@ -99,6 +98,8 @@
 
 
 <script th:inline="javascript">
+	const isLogin = [[${isLogin}]];
+
 	$(document).ready(function(){
 		$('#htopTitle').text('설정');
 
@@ -151,10 +152,14 @@
 				}
 				appAgreeYn = 'N';
 			}
-			// let params = {}
-			// params.appAgreeYn = appAgreeYn;
-			// let jsonData = JSON.stringify(params);
-			// gagajf.ajaxJsonSubmit('/customer/appagree/update', jsonData);
+
+			if (isLogin) {
+				let params = {}
+				params.appAgreeYn = appAgreeYn;
+				let jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/app/appagree/update', jsonData);
+			}
+
 		}
 	});
 
@@ -176,10 +181,14 @@
 				}
 				mkAgreeYn = 'N';
 			}
-			// let params = {}
-			// params.mkAgreeYn = mkAgreeYn;
-			// let jsonData = JSON.stringify(params);
-			// gagajf.ajaxJsonSubmit('/customer/mkagree/update', jsonData);
+
+			if (isLogin) {
+				let params = {}
+				params.mkAgreeYn = mkAgreeYn;
+				let jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/app/mkagree/update', jsonData);
+			}
+
 		}
 	});
 

+ 140 - 1
src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html

@@ -68,7 +68,7 @@
 	<div id="menuFull">
 		<div class="fullHead">
 			<div class="goHome"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);"><img src="/images/mo/logo_STYLE24_full.png" alt=""></a></div>
-			<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_CUSTOMER_SETTING);" class="appSett" th:if="${isApp == 'true'}">AppSetting</a>
+			<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_APP_SETTING);" class="appSett" th:if="${isApp == 'true'}">AppSetting</a>
 			<a href="javascript:menu_cls();" class="menu_cls">close</a>
 		</div>
 		<div class="fullBody">
@@ -200,10 +200,137 @@
 			});
 	}
 	
+	// 팝업
+	let fnGetPopup = function(){
+		let data = {viewPage : [[${viewPage}]]
+					,cateNo : [[${popupCateNo}]]
+					,brandCd : [[${popupBrandCd}]]
+					,planSq : [[${popupPlanSq}]]
+					,preview : [[${preview}]]
+					,viewDt : [[${viewDt}]]
+		};
+		$.getJSON('/display/popup/list', data, function(result, status) {
+			if (status === 'success') {
+				if(result.dataList.length>0){
+					let pClass = "";
+					if ("H" == result.popupGb){
+						pClass = "half";
+					}
+					let popupYn = "N";
+					let popupSq = "";
+					let tag = '';
+					tag += '<div id="popupMainNotice" class="popup_main_notice half active">\n';  <!-- half 팝업일 경우 : half 클래스 포함 -->
+					tag += '	<div class="popup_content">\n';
+					if ("H" == result.popupGb){
+						
+						$.each(result.dataList, function(idx, item) {
+							if(document.cookie.match('(^|;)?style_popup_'+item.popupSq+'=([^;]*)(;|$)')==null) {
+								popupSq += item.popupSq +"|";
+							}
+						});	
+						
+					tag += '		<div class="popup_header">\n';
+					tag += '			<a href="javascript:void(0);" onclick="fnLayerPopupUnexpDaysClose(\''+popupSq+'\',1);" class="btn_underline"> 하루 보지 않기</a>\n';
+					tag += '			<a href="javascript:void(0);" id="btnPopupClose" onclick="fnLayerPopupClose();" class="btn_popup_close">닫기</a>\n';
+					tag += '		</div>\n';
+					}
+					tag += '		<div class="popup_body">\n';
+					tag += '			<div class="swiper-container">\n';
+					tag += '				<div class="swiper-wrapper">\n';
+					$.each(result.dataList, function(idx, item) {
+						if(document.cookie.match('(^|;)?style_popup_'+item.popupSq+'=([^;]*)(;|$)')==null) {
+							tag += '					<div class="swiper-slide">\n';
+							if(!gagajf.isNull(item.linkUrl1) && item.linkUrl1 !== "#"){
+								let linkTarget = "";
+								if ("N" == item.linkTarget){
+									linkTarget = "target=\"_blank\"";
+								}
+							tag += '						<a href="'+ item.linkUrl1 +'" '+linkTarget+' >\n';	
+							}
+							tag += '						<img src="'+ _imgUrl+'/'+item.imgUrl1+'" alt="">\n';
+							if(!gagajf.isNull(item.linkUrl1) && item.linkUrl1 !== "#"){
+							tag += '						</a>\n';
+							}
+							tag += '					</div>\n';
+							popupYn = "Y";
+							popupSq += item.popupSq +"|";
+						}
+					});	
+					tag += '				</div>\n';
+					tag += '				<div class="swiper-pagination"></div>\n';
+					tag += '			</div>\n';
+					tag += '		</div>\n';
+					if ("F" == result.popupGb){
+					tag += '		<div class="popup_footer">\n';
+					tag += '			<a href="javascript:void(0);" onclick="fnLayerPopupUnexpDaysClose(\''+popupSq+'\',1);" class="btn_underline"> 하루 보지 않기</a>\n';
+					tag += '			<a href="javascript:void(0);" id="btnPopupClose" onclick="fnLayerPopupClose();" class="btn_popup_close">닫기</a>\n';
+					tag += '		</div>\n';
+					}
+					tag += '	</div>\n';
+					tag += '</div>\n';
+					
+					if (popupYn == "Y"){
+						if ($('#popupMainNotice').length === 0) {
+							$('body').append(tag);
+						}	
+					}
+					
+					/* SLIDE - 메인 공지 팝업 */
+					var popup_main_notice_slide = new Swiper ('.popup_main_notice .swiper-container', {
+						loop: true,
+						spaceBetween: 0,
+						speed:200,
+						autoplay: {
+							delay: 4000,
+							disableOnInteraction: false,
+						},
+						pagination: {
+							el: '.popup_main_notice .swiper-pagination',
+							type: 'fraction',
+						},
+					});			
+					
+				}
+			}
+		});
+	}
+
+	let fnLayerPopupUnexpDaysClose = function(seq, unexpDays){
+		let arrSeq = seq.split("|");
+		if (arrSeq.length > 0){
+			let todayDate = new Date();
+			//todayDate = new Date(parseInt(todayDate.getTime() / 86400000) * 86400000 + 54000000);
+			todayDate = new Date(parseInt(todayDate.getTime() / 86400000) * 86400000);	// 당일 자정처리
+			todayDate.setDate(todayDate.getDate() + unexpDays);
+			
+			$.each(arrSeq, function (idx, item) {
+				if (!gagajf.isNull(item)){
+					document.cookie = "style_popup_"+item+"=Y; path=/; expires=" + todayDate.toGMTString() + ";";	
+				}
+			});
+		}
+		
+		fnLayerPopupClose();
+	}
+	// 창 닫기
+	let fnLayerPopupClose = function(){
+		$(".popup_main_notice").removeClass("active");
+
+		if(!$(".popup_main_notice").hasClass("active")){
+			$("body").css({"overflow":"visible"});
+		}else{
+			$("body").css({"overflow":"hidden"});
+		};
+		$('#popupMainNotice').remove();
+	}
+	
 	$(document).ready(function() {
 		// 퀵메뉴탭 조회
 		fnCreateQuickMenuTab();
 		
+		// 팝업조회
+		fnGetPopup();
+		
 		$.getJSON('/cart/goods/not/soldout/cnt', function (order, status) {
 			let cartCnt;
 			if (order.cartGoodsList.length > 99) {
@@ -219,7 +346,19 @@
 				$('#spanGnbCartCnt').show();
 			}
 		});
+		
+		
+		
 	});
+	
+
+	if($(".popup_main_notice").hasClass("active")){
+		$("body").css({"overflow":"hidden"});
+	}else{
+		$("body").css({"overflow":"visible"});
+	};
+	
+	
 /*]]>*/
 </script>
 

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

@@ -85,7 +85,7 @@
 																			or #strings.contains(goodsImg.sysImgNm,'_C3')
 																			or #strings.contains(goodsImg.sysImgNm,'_C4')
 																			or #strings.contains(goodsImg.sysImgNm,'_C5')}">
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 				</th:block>
 			</div>
 		</div>
@@ -104,18 +104,18 @@
 											or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
 			<span class="tit_view">PRODUCT VIEW</span>
 			<div class="view">
-				<th:block th:each="goodsImg, status : ${goodsImgList}" 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') or #strings.contains(goodsImgList,'_D6')
-													or #strings.contains(goodsImgList,'_D7') or #strings.contains(goodsImgList,'_D8')
-													or #strings.contains(goodsImgList,'_D9') or #strings.contains(goodsImgList,'_D10')
-													or #strings.contains(goodsImgList,'_D11') or #strings.contains(goodsImgList,'_D12')
-													or #strings.contains(goodsImgList,'_D13') or #strings.contains(goodsImgList,'_D14')
-													or #strings.contains(goodsImgList,'_D15') or #strings.contains(goodsImgList,'_D16')
-													or #strings.contains(goodsImgList,'_D17') or #strings.contains(goodsImgList,'_D18')
-													or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+				<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') or #strings.contains(goodsImg.sysImgNm,'_D6')
+																				or #strings.contains(goodsImg.sysImgNm,'_D7') or #strings.contains(goodsImg.sysImgNm,'_D8')
+																				or #strings.contains(goodsImg.sysImgNm,'_D9') or #strings.contains(goodsImg.sysImgNm,'_D10')
+																				or #strings.contains(goodsImg.sysImgNm,'_D11') or #strings.contains(goodsImg.sysImgNm,'_D12')
+																				or #strings.contains(goodsImg.sysImgNm,'_D13') or #strings.contains(goodsImg.sysImgNm,'_D14')
+																				or #strings.contains(goodsImg.sysImgNm,'_D15') or #strings.contains(goodsImg.sysImgNm,'_D16')
+																				or #strings.contains(goodsImg.sysImgNm,'_D17') or #strings.contains(goodsImg.sysImgNm,'_D18')
+																				or #strings.contains(goodsImg.sysImgNm,'_D19') or #strings.contains(goodsImg.sysImgNm,'_D20')}">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 				</th:block>
 			</div>
 		</div>
@@ -125,7 +125,7 @@
 			<span class="tit_view">FABRIC</span>
 			<div class="view">
 				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_F1')}">
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 				</th:block>
 			</div>
 		</div>
@@ -138,7 +138,7 @@
 				<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="">
+					<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 					</th:block>
 				</span>
 			</div>
@@ -147,7 +147,7 @@
 		<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=720'}" alt="">
+					<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 					</th:block>
 			</div>
 		</div>

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

@@ -302,7 +302,7 @@
 																					or #strings.contains(goodsImg.sysImgNm,'_C3')
 																					or #strings.contains(goodsImg.sysImgNm,'_C4')
 																					or #strings.contains(goodsImg.sysImgNm,'_C5')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>
@@ -321,18 +321,18 @@
 													or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
 					<span class="tit_view">PRODUCT VIEW</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" 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') or #strings.contains(goodsImgList,'_D6')
-																					or #strings.contains(goodsImgList,'_D7') or #strings.contains(goodsImgList,'_D8')
-																					or #strings.contains(goodsImgList,'_D9') or #strings.contains(goodsImgList,'_D10')
-																					or #strings.contains(goodsImgList,'_D11') or #strings.contains(goodsImgList,'_D12')
-																					or #strings.contains(goodsImgList,'_D13') or #strings.contains(goodsImgList,'_D14')
-																					or #strings.contains(goodsImgList,'_D15') or #strings.contains(goodsImgList,'_D16')
-																					or #strings.contains(goodsImgList,'_D17') or #strings.contains(goodsImgList,'_D18')
-																					or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
+						<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') or #strings.contains(goodsImg.sysImgNm,'_D6')
+																					or #strings.contains(goodsImg.sysImgNm,'_D7') or #strings.contains(goodsImg.sysImgNm,'_D8')
+																					or #strings.contains(goodsImg.sysImgNm,'_D9') or #strings.contains(goodsImg.sysImgNm,'_D10')
+																					or #strings.contains(goodsImg.sysImgNm,'_D11') or #strings.contains(goodsImg.sysImgNm,'_D12')
+																					or #strings.contains(goodsImg.sysImgNm,'_D13') or #strings.contains(goodsImg.sysImgNm,'_D14')
+																					or #strings.contains(goodsImg.sysImgNm,'_D15') or #strings.contains(goodsImg.sysImgNm,'_D16')
+																					or #strings.contains(goodsImg.sysImgNm,'_D17') or #strings.contains(goodsImg.sysImgNm,'_D18')
+																					or #strings.contains(goodsImg.sysImgNm,'_D19') or #strings.contains(goodsImg.sysImgNm,'_D20')}">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>
@@ -341,8 +341,8 @@
 				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_F1')}">
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_F1')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_F1')}" >
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>
@@ -355,7 +355,7 @@
 						<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="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</th:block>
 						</span>
 					</div>
@@ -364,7 +364,7 @@
 				<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=720'}" alt="">
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 							</th:block>
 					</div>
 				</div>
@@ -987,7 +987,7 @@
 														<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
 														<!-- <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' or goodsCompose.stockQty <= 0)? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
+															th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90' or goodsCompose.stockQty <= 0)? 'true':''}, data-soldout=${(goodsCompose.stockQty <= 0)? 'true':''}"
 															><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>

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

@@ -152,7 +152,7 @@
 										<dt>할인 금액 차감</dt>
 										<dd>
 											<div>
-												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
+												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
 											</div>
 										</dd>
 									</div>

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

@@ -217,7 +217,7 @@
 										<dt>할인 금액 차감</dt>
 										<dd>
 											<div>
-												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
+												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
 											</div>
 										</dd>
 									</div>

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/mypage/MypageDeliveryInfoFormMob.html

@@ -123,7 +123,7 @@
 								<th:block th:if="${ordDtl.ordDtlStat == 'G013_10'}">
 									<div class="goods_btn_wrap btn_group_flex">
 										<div><button type="button" class="btn btn_default btn_cncl_complete" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 									</div>
 								</th:block>
 								<!-- //입금대기 (1:1문의, 쇼핑백 담기) -->
@@ -208,7 +208,7 @@
 										</th:block>
 										<!-- //리뷰사용불가능, 리뷰등록후일때 -->
 
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
@@ -237,7 +237,7 @@
 								<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
 									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
 											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html

@@ -130,7 +130,7 @@
 								<th:block th:if="${ordDtl.ordDtlStat == 'G013_10'}">
 									<div class="goods_btn_wrap btn_group_flex">
 										<div><button type="button" class="btn btn_default btn_cncl_complete" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 									</div>
 								</th:block>
 								<!-- //입금대기 (1:1문의, 쇼핑백 담기) -->
@@ -467,7 +467,7 @@
 										</th:block>
 										<!-- //리뷰사용불가능, 리뷰등록후일때 -->
 
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
@@ -496,7 +496,7 @@
 								<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
 									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
 											<div><button type="button" class="btn btn_primary btn_review_write" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></div>

+ 12 - 3
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html

@@ -114,7 +114,7 @@
 										</button>
 									</div>
 									<div>
-										<button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
+										<button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
 											<span>쇼핑백 담기</span>
 										</button>
 									</div>
@@ -276,7 +276,7 @@
 							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 								<div class="goods_btn_wrap btn_group_flex">
 									<div>
-										<button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
+										<button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
 											<span>쇼핑백 담기</span>
 										</button>
 									</div>
@@ -290,6 +290,15 @@
 										</div>
 									</th:block>
 									<!-- //리뷰사용가능, 리뷰등록전일때 -->
+									<!-- 리뷰사용불가능, 리뷰등록일때 -->
+									<th:block th:unless="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
+										<div>
+											<button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);">
+												<span>1:1 문의</span>
+											</button>
+										</div>
+									</th:block>
+									<!-- //리뷰사용가능, 리뷰등록전일때 -->
 								</div>
 							</th:block>
 							<!-- //구매확정 -->
@@ -322,7 +331,7 @@
 								<!-- 배송지등록완료, 결제전취소, 결제후취소 아닐경우 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_50' or ${ordDtl.ordDtlStat} == 'G013_55' or ${ordDtl.ordDtlStat} == 'G013_60' or ${ordDtl.ordDtlStat} == 'G013_70'">
 									<th:block th:if="${ordDtl.recipBaseAddr != ''} and ${ordDtl.ordDtlStat} != 'G013_98' and ${ordDtl.ordDtlStat} != 'G013_99'">
-										<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save"><span>쇼핑백 담기</span></button></div>
 										<!-- 리뷰사용가능, 리뷰등록전일때 -->
 										<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null and ${ordDtl.ordDtlStat} == 'G013_70'">
 											<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>

+ 2 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html

@@ -251,8 +251,10 @@
 													</div>
 												</th>
 												<td>
+													<div class="textarea_wrap">
 													<textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10"></textarea>
 													<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>
+													</div>
 												</td>
 											</tr>
 											<tr>

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

@@ -32,7 +32,7 @@
 let month = [[${wishMonth}]];
 
 var wishlistDelete = function(obj) {
-	cfnPutWishList(obj);
+	cfnMoPutWishList(obj);
 
 	ajaxWishList();
 }	
@@ -54,7 +54,7 @@ var ajaxWishList = function () {
 						if (item.regDtMonth == month[i].regDt) {
 							html += '		<div class="item_prod">\n';
 							html += '			<div class="item_state">\n';
-							html += '				<button type="button" class="itemLike active likeit" goodsCd=\''+item.goodsCd+'\' onclick="wishlistDelete(this)">관심상품 추가</button>\n';
+							html += '				<button type="button" class="itemLike likeit" goodsCd=\''+item.goodsCd+'\' onclick="wishlistDelete(this)">관심상품 추가</button>\n';
 							html += '				<a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">\n';
 							html += '					<div class="itemPic">\n';
 							html += '						<img class="vLHTC pd_img"  src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '">\n';

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

@@ -147,7 +147,7 @@
 										<dt>할인 금액 차감</dt>
 										<dd>
 											<div>
-												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
+												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
 											</div>
 										</dd>
 									</div>

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

@@ -207,7 +207,7 @@
 										<dt>할인 금액 차감</dt>
 										<dd>
 											<div>
-												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
+												<span th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></span>원
 											</div>
 										</dd>
 									</div>

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/NoMemberDeliveryInfoFormMob.html

@@ -103,7 +103,7 @@
 							<!-- 입금대기 (1:1문의, 쇼핑백 담기) -->
 							<th:block th:if="${ordDtl.ordDtlStat == 'G013_10'}">
 								<div class="goods_btn_wrap btn_group_flex">
-									<div><button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+									<div><button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 								</div>
 							</th:block>
 							<!-- //입금대기 (1:1문의, 쇼핑백 담기) -->
@@ -158,7 +158,7 @@
 							<!-- 구매확정 -->
 							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 								<div class="goods_btn_wrap btn_group_flex">
-									<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+									<div><button type="button" class="btn btn_default btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 								</div>
 							</th:block>
 							<!-- //구매확정 -->

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/NoMemberOrderDetailFormMob.html

@@ -114,7 +114,7 @@
 								<!-- 입금대기 (1:1문의, 쇼핑백 담기) -->
 								<th:block th:if="${ordDtl.ordDtlStat == 'G013_10'}">
 									<div class="goods_btn_wrap btn_group_flex">
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 									</div>
 								</th:block>
 								<!-- //입금대기 (1:1문의, 쇼핑백 담기) -->
@@ -212,7 +212,7 @@
 								<!-- 구매확정 -->
 								<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 									<div class="goods_btn_wrap btn_group_flex">
-										<div><button type="button" class="btn btn_primary btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
+										<div><button type="button" class="btn btn_default btn_cart_save" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></div>
 									</div>
 								</th:block>
 								<!-- //구매확정 -->

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/NoMemberOrderListInfoMob.html

@@ -78,7 +78,7 @@
 							<th:block th:if="${ordDtl.ordDtlStat == 'G013_10'}">
 								<div class="goods_btn_wrap btn_group_flex">
 									<div>
-										<button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
+										<button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
 											<span>쇼핑백 담기</span>
 										</button>
 									</div>
@@ -156,7 +156,7 @@
 							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 								<div class="goods_btn_wrap btn_group_flex">
 									<div>
-										<button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
+										<button type="button" class="btn btn_default btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);">
 											<span>쇼핑백 담기</span>
 										</button>
 									</div>

+ 24 - 8
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -1316,13 +1316,13 @@
 								tag += '			<div class="cp_detail">';
 								tag += '				<p class="tit">'+item.cpnNm+'</p>';
 								if (item.dcWay == '%') {
-									tag += '				<strong class="sale_t won_t"><span>'+item.dcVal+'</span>%</strong>';
+									tag += '				<strong class="sale_t won_t"><span>'+item.dcVal.addComma()+'</span>%</strong>';
 								}else{
-									tag += '				<strong class="sale_t won_t"><span>'+item.dcVal+'</span>원</strong>';
+									tag += '				<strong class="sale_t won_t"><span>'+item.dcVal.addComma()+'</span>원</strong>';
 								}
 								
 								tag += '				<p class="cp_cont">'+item.useCondition+'</p>';
-								tag += '				<span class="cp_cnt"><span>'+item.cpnCnt+'</span>장 보유</span>';
+								tag += '				<span class="cp_cnt"><span>'+item.cpnCnt.addComma()+'</span>장 보유</span>';
 								tag += '			</div>';
 								tag += '			<span class="cp_shape"></span>';
 								tag += '		</div>';
@@ -1346,7 +1346,19 @@
 					}
 			});
 	}
+    
 	
+	/* var doubleSubmitFlag = false;
+    function doubleSubmitCheck(){
+        if(doubleSubmitFlag){
+            return doubleSubmitFlag;
+        }else{
+            doubleSubmitFlag = true;
+            return false;
+        }
+    }
+    */
+     
 	//쿠폰 다운로드
 	var fnQuickCouponDown = function(obj){
 
@@ -1354,8 +1366,9 @@
 			cfnGoToPage(_PAGE_LOGIN);
 			return false;
 		}
+		//if(doubleSubmitCheck()) return;
 		let cpnId = obj;
-		gagajf.ajaxJsonSubmit('/mypage/quick/coupon/download', JSON.stringify({cpnId: cpnId}), fnQuickCouponCallBack);
+		gagajf.ajaxJsonSubmit('/mypage/quick/coupon/download', JSON.stringify({cpnId: cpnId}), fnQuickCouponCallBack, true);
 	}
 
 	// 쿠폰다운로드 콜백
@@ -1372,7 +1385,6 @@
 		}			
 	}
 
-	
 	// 소유한 쿠폰 사용안내 모달
 	var useInfoCoupon = function (id) {
 		var data = {cpnId : id};
@@ -1406,7 +1418,7 @@
 		};
 		$.getJSON('/display/popup/list', data, function(result, status) {
 			if (status === 'success') {
-				if(result.length>0){
+				if(result.dataList.length>0){
 					let popupYn = "N";
 					let popupSq = "";
 					let tag = '';
@@ -1415,11 +1427,15 @@
 					tag += '		<div class="popup_body">\n';
 					tag += '			<div class="swiper-container">\n';
 					tag += '				<div class="swiper-wrapper">\n';
-					$.each(result, function(idx, item) {
+					$.each(result.dataList, function(idx, item) {
 						if(document.cookie.match('(^|;)?style_popup_'+item.popupSq+'=([^;]*)(;|$)')==null) {
 							tag += '					<div class="swiper-slide">\n';
 							if(!gagajf.isNull(item.linkUrl1) && item.linkUrl1 !== "#"){
-							tag += '						<a href="'+ item.linkUrl1 +'"  target="_blank">\n';	
+								let linkTarget = "";
+								if ("N" == item.linkTarget){
+									linkTarget = "target=\"_blank\"";
+								}
+							tag += '						<a href="'+ item.linkUrl1 +'" '+linkTarget+' >\n';	
 							}
 							tag += '						<img src="'+ _imgUrl+'/'+item.imgUrl1+'" width="100%" alt="">\n';
 							if(!gagajf.isNull(item.linkUrl1) && item.linkUrl1 !== "#"){

+ 11 - 11
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html

@@ -106,17 +106,17 @@
 										or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
 		<span class="tit_view">PRODUCT VIEW</span>
 		<div class="view">
-			<th:block th:each="goodsImg, status : ${goodsImgList}" 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') or #strings.contains(goodsImgList,'_D6')
-																		or #strings.contains(goodsImgList,'_D7') or #strings.contains(goodsImgList,'_D8')
-																		or #strings.contains(goodsImgList,'_D9') or #strings.contains(goodsImgList,'_D10')
-																		or #strings.contains(goodsImgList,'_D11') or #strings.contains(goodsImgList,'_D12')
-																		or #strings.contains(goodsImgList,'_D13') or #strings.contains(goodsImgList,'_D14')
-																		or #strings.contains(goodsImgList,'_D15') or #strings.contains(goodsImgList,'_D16')
-																		or #strings.contains(goodsImgList,'_D17') or #strings.contains(goodsImgList,'_D18')
-																		or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
+			<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') or #strings.contains(goodsImg.sysImgNm,'_D6')
+																		or #strings.contains(goodsImg.sysImgNm,'_D7') or #strings.contains(goodsImg.sysImgNm,'_D8')
+																		or #strings.contains(goodsImg.sysImgNm,'_D9') or #strings.contains(goodsImg.sysImgNm,'_D10')
+																		or #strings.contains(goodsImg.sysImgNm,'_D11') or #strings.contains(goodsImg.sysImgNm,'_D12')
+																		or #strings.contains(goodsImg.sysImgNm,'_D13') or #strings.contains(goodsImg.sysImgNm,'_D14')
+																		or #strings.contains(goodsImg.sysImgNm,'_D15') or #strings.contains(goodsImg.sysImgNm,'_D16')
+																		or #strings.contains(goodsImg.sysImgNm,'_D17') or #strings.contains(goodsImg.sysImgNm,'_D18')
+																		or #strings.contains(goodsImg.sysImgNm,'_D19') or #strings.contains(goodsImg.sysImgNm,'_D20')}">
 			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 			</th:block>
 		</div>

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

@@ -265,7 +265,7 @@
 												<ul class="list">
 													<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
 													<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsCompose.qty}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
-														th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90' or goodsCompose.stockQty <= 0)? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
+														th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90' or goodsCompose.stockQty <= 0)? 'true':''}, data-soldout=${(goodsCompose.stockQty <= 0)? 'true':''}"
 														>
 														<div th:text="${goodsOption.optCd1Nm}">상품옵션</div>
 														<div th:if="${goodsOption.addPrice > 0}" th:text="|+${#numbers.formatInteger(goodsOption.addPrice, 0,'COMMA')}원|">0원</div>
@@ -730,18 +730,18 @@
 													or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
 					<span class="tit_view">PRODUCT VIEW</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" 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') or #strings.contains(goodsImgList,'_D6')
-																					or #strings.contains(goodsImgList,'_D7') or #strings.contains(goodsImgList,'_D8')
-																					or #strings.contains(goodsImgList,'_D9') or #strings.contains(goodsImgList,'_D10')
-																					or #strings.contains(goodsImgList,'_D11') or #strings.contains(goodsImgList,'_D12')
-																					or #strings.contains(goodsImgList,'_D13') or #strings.contains(goodsImgList,'_D14')
-																					or #strings.contains(goodsImgList,'_D15') or #strings.contains(goodsImgList,'_D16')
-																					or #strings.contains(goodsImgList,'_D17') or #strings.contains(goodsImgList,'_D18')
-																					or #strings.contains(goodsImgList,'_D19') or #strings.contains(goodsImgList,'_D20')}">
-						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+						<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') or #strings.contains(goodsImg.sysImgNm,'_D6')
+																					or #strings.contains(goodsImg.sysImgNm,'_D7') or #strings.contains(goodsImg.sysImgNm,'_D8')
+																					or #strings.contains(goodsImg.sysImgNm,'_D9') or #strings.contains(goodsImg.sysImgNm,'_D10')
+																					or #strings.contains(goodsImg.sysImgNm,'_D11') or #strings.contains(goodsImg.sysImgNm,'_D12')
+																					or #strings.contains(goodsImg.sysImgNm,'_D13') or #strings.contains(goodsImg.sysImgNm,'_D14')
+																					or #strings.contains(goodsImg.sysImgNm,'_D15') or #strings.contains(goodsImg.sysImgNm,'_D16')
+																					or #strings.contains(goodsImg.sysImgNm,'_D17') or #strings.contains(goodsImg.sysImgNm,'_D18')
+																					or #strings.contains(goodsImg.sysImgNm,'_D19') or #strings.contains(goodsImg.sysImgNm,'_D20')}">
+						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt=""  th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 						</th:block>
 					</div>
 				</div>

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

@@ -147,7 +147,7 @@
 											</div>
 											<div class="include_item">
 												<dt>할인 금액 차감</dt>
-												<dd><em th:text="${#numbers.formatInteger((oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt) * -1, 1, 'COMMA')}"></em>원</dd>
+												<dd><em th:text="${#numbers.formatInteger((oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt) * -1, 1, 'COMMA')}"></em>원</dd>
 											</div>
 										</dl>
 									</td>

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

@@ -211,7 +211,7 @@
 											</div>
 											<div class="include_item">
 												<dt>할인 금액 차감</dt>
-												<dd><em th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></em>원</dd>
+												<dd><em th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></em>원</dd>
 											</div>
 										</dl>
 									</td>

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

@@ -144,7 +144,7 @@
 											</div>
 											<div class="include_item">
 												<dt>할인 금액 차감</dt>
-												<dd><em th:text="${#numbers.formatInteger((oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt) * -1, 1, 'COMMA')}"></em>원</dd>
+												<dd><em th:text="${#numbers.formatInteger((oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt) * -1, 1, 'COMMA')}"></em>원</dd>
 											</div>
 										</dl>
 									</td>

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

@@ -209,7 +209,7 @@
 											</div>
 											<div class="include_item">
 												<dt>할인 금액 차감</dt>
-												<dd><em th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></em>원</dd>
+												<dd><em th:text="${#numbers.formatInteger(-(oneData.rfCpn1Amt + oneData.rfTmtb1Amt + oneData.rfTmtb2Amt + oneData.rfGoodsCpnAmt + oneData.rfCartCpnAmt + oneData.rfDelvCpnAmt + oneData.rfPrePntAmt), 1, 'COMMA')}"></em>원</dd>
 											</div>
 										</dl>
 									</td>

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

@@ -36,7 +36,10 @@ const _PAGE_USE_TERMS_LAYER = _frontUrl + "/customer/use/terms/layer";								//
 const _PAGE_PRIVACY_POLICY_LAYER = _frontUrl + "/customer/privacy/policy/layer";					// 회원가입 > 개인정보취급방침
 const _PAGE_PRIVACY_TRUST_LAYER = _frontUrl + "/customer/privacy/trust/layer";						// 회원가입 > 개인정보취급위탁
 const _PAGE_NON_CUSTOMER_ORDER_CONFIRM = _frontUrl + "/customer/noncust/order/confirm/form";		// 고객 > 비회원주문확인
-const _PAGE_CUSTOMER_SETTING = _frontUrl + "/customer/setting/form";								// 앱 > 설정
+
+//== 앱 ==/
+const _PAGE_APP_SETTING = _frontUrl + "/app/setting/form";											// 앱 > 설정
+const _PAGE_APP_NOTICE = _frontUrl + "/app/notice/form";											// 앱 > 알림함
 
 //== 상품상세 ==/
 const _PAGE_GOODS_DETAIL = _frontUrl + "/goods/detail/form?goodsCd=";								// 상품 상세