Explorar el Código

이태영 - 20210415 장바구니

xodud1202 hace 5 años
padre
commit
a2bdf42103

+ 2 - 1
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -107,11 +107,12 @@ public class TsfCouponService {
 				cpn.setRegNo(param.getRegNo());
 				cpn.setUpdNo(param.getUpdNo());
 				updateGiveRandomCpnInfo(cpn);
+				cpn.setDownloadCnt(1);
 			}
 		} else {
 			// 다운로드 받을 수 있는 쿠폰이 존재하지 않음.
 			cpn = new Coupon();
-			cpn.setResult("해당 쿠폰은 존재하지 않습니다.");
+			cpn.setResult("할인코드가 일치하지 않습니다. 정확히 입력해주세요.");
 			return cpn;
 		}
 

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

@@ -60,6 +60,7 @@ public class Cart extends TscBaseDomain {
 	private int qty;				// 구성 상품 기준 재고 수량
 	private int currPrice;			// 상품판매가
 	private int minOrdQty;			// 최소주문가능수량
+	private int maxOrdQty;			// 최대주문가능수량
 	private int addPrice;			// 상품 옵션가
 	private String goodsType;		// 상품 타입
 	private String compsGoodsCd;	// 세트 구성상품 코드

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

@@ -869,6 +869,8 @@
 		     , G.GOODS_NM
 			 , BR.BRAND_ENM
 			 , BR.BRAND_KNM
+		     , G.MIN_ORD_QTY
+		     , CASE WHEN G.MAX_ORD_QTY > G.DAY_MAX_ORD_QTY THEN G.DAY_MAX_ORD_QTY ELSE G.MAX_ORD_QTY END AS MAX_ORD_QTY
 			 , CA.CART_SQ
 			 , CA.GOODS_QTY
 			 , G.SELF_GOODS_YN

+ 46 - 11
src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html

@@ -110,8 +110,13 @@
 						<div class="opt_header">
 							<span class="title">옵션1</span>
 							<span class="info" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
-							<div class="form_field">
-								<input id="od_item_off" type="checkbox"><label for="od_item_off"><span>품절 제외</span></label>
+							<div class="check_excluding form_field">
+								<div>
+									<input th:id="|od_item_off_${comp.goodsCd}|" type="checkbox" class="soldoutRemove" th:value="${comp.goodsCd}" onClick='getGuidance(event, this)'><label th:for="|od_item_off_${comp.goodsCd}|"> <span>품절제외</span> </label>
+								</div>
+								<div class="guidance">
+									<p><span class="soldoutCnt">aa</span>개 품절 옵션이 제외되었습니다</p>
+								</div>
 							</div>
 						</div>
 						<form class="form_wrap">
@@ -132,7 +137,9 @@
 					<div class="opt_select">
 						<div class="opt_header">
 							<span class="title">옵션2</span>
-							<span class="color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
+							<!--<span th:text="${size.optCd2}"></span>
+							<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>-->
+							<span class="info" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
 						</div>
 						<form class="form_wrap">
 							<div class="form_field">
@@ -142,7 +149,7 @@
 											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:addPrice="${size.addPrice}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 												</th:block>
 											</ul>
 										</div>
@@ -167,8 +174,13 @@
 						<div class="opt_header">
 							<span class="title">옵션1</span>
 							<span class="info" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${comp.colorNm}"></span>
-							<div class="form_field">
-								<input id="od_item_off" type="checkbox"><label for="od_item_off"><span>품절 제외</span></label>
+							<div class="check_excluding form_field">
+								<div>
+									<input th:id="|od_item_off_${comp.goodsCd}|" class="soldoutRemove" type="checkbox" th:value="${comp.goodsCd}" onClick='getGuidance(event, this)'><label th:for="|od_item_off_${comp.goodsCd}|"><span>품절 제외</span></label>
+								</div>
+								<div class="guidance">
+									<p><span class="soldoutCnt">aa</span>개 품절 옵션이 제외되었습니다</p>
+								</div>
 							</div>
 						</div>
 						<form class="form_wrap">
@@ -199,7 +211,7 @@
 											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:addPrice="${size.addPrice}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 												</th:block>
 											</ul>
 										</div>
@@ -212,12 +224,14 @@
 			</th:block>
 
 			<div class="opt_count">
+				<input type="hidden" class="minOrdQty" th:value="${cart.minOrdQty}" />
+				<input type="hidden" class="maxOrdQty" th:value="${cart.maxOrdQty}" />
 				<div class="opt_header">
 					<span class="title">수량</span>
 				</div>
 				<div class="number_count">
 					<span class="minus"><em class="sr-only">감소</em></span>
-					<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}"/>
+					<input type="text" name="goodsQty" th:max="${cart.maxOrdQty}" style='ime-mode:disabled' th:value="${cart.goodsQty}"/>
 					<span class="plus"><em class="sr-only">추가</em></span>
 				</div>
 			</div>
@@ -240,6 +254,7 @@
 		let goodsCd = $(this).parent().attr("data");
 		let optCd1 = $(this).attr("data");
 		let colorNo = $(this).attr("colorNo");
+
 		let firstSize = "";
 		if(optCd1 != $(".option1_" + goodsCd).val()) {
 			let firstOptCd = $("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " li:first").attr("optcd");
@@ -259,9 +274,18 @@
 
 	// 세트상품, 입점업체 상품 사이즈 변경시
 	$(".sizeList > .combo > .list li").on("click", function() {
-		$(this).parent().parent().parent().parent().parent().parent().find(".opt_header .text").text($(this).text());
+		let size = $(this).text();
+		let addPrice = $(this).attr("addPrice");
+
 		$("#cartOptionModal .option_" + $(this).parent().attr("data")).val($(this).attr("optcd"));
-		$("#cartOptionModal .option2_" + $(this).parent().attr("data")).val($(this).text());
+		$("#cartOptionModal .option2_" + $(this).parent().attr("data")).val(size);
+
+		let sizeTextHtml = "<span>" + size + "</span>";
+		if(addPrice > 0) {
+			sizeTextHtml += "<span>(+<em>" + Number(addPrice).toLocaleString() + "</em>)원</span>";
+		}
+
+		$(this).parent().parent().parent().parent().parent().parent().find(".opt_header .info").html(sizeTextHtml);
 	});
 
 	/* 옵션변경 > 수량조절 */
@@ -348,7 +372,7 @@
 			},
 			success : function(result) {
 				mcxDialog.alert(result.message);
-				$(".closeCartOptionModal").trigger("click");
+				$("#optModifyPop01 .cartOptionModal .popup_close").trigger("click");
 				$("body").css("overflow", "");
 				if(result.status == "SUCCESS") {
 					let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
@@ -357,6 +381,17 @@
 			}
 		});
 	}
+
+	function getGuidance(event, obj)  {
+		if(event.target.checked){
+			$(".size_" + $(obj).val()).find("li[aria-disabled=true]").hide();
+			$(obj).parent().parent().find(".soldoutCnt").text($(".size_" + $(obj).val()).find("li[aria-disabled=true]").length);
+			$(obj).parent().parent().find(".guidance").addClass("ontoast");
+			setTimeout(function(){$(obj).parent().parent().find(".guidance").removeClass("ontoast");}, 5000);
+		} else {
+			$(".size_" + $(obj).val()).find("li[aria-disabled=true]").show();
+		}
+	}
 </script>
 <!-- //옵션변경 팝업 -->
 </html>

+ 32 - 12
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -34,7 +34,7 @@
 							<th class="sr-only">총알배송</th>
 							<td>
 								<div class="form_field">
-									<input type="radio" id="chk-1" name="shotDelvUseYn" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y')}">
+									<input type="radio" id="chk-1" name="shotDelvUseYn" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y') and order.shotCartList.size() > 0}">
 									<label for="chk-1">
 										<span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span>
 										<span class="icon_tag">
@@ -48,7 +48,7 @@
 							<th class="sr-only">총알배송 안함</th>
 							<td>
 								<div class="form_field">
-									<input id="chk-2" type="radio" name="shotDelvUseYn" value="N" th:checked="${order.shotDelvUseYn == null or !order.shotDelvUseYn.equals('Y')}">
+									<input id="chk-2" type="radio" name="shotDelvUseYn" value="N" th:checked="${order.shotDelvUseYn == null or !order.shotDelvUseYn.equals('Y') or order.shotCartList.size() < 1}">
 									<label for="chk-2">
 										<span>총알배송 안함</span>
 									</label>
@@ -166,14 +166,17 @@
 						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}">
 							<span th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></span>
 						</div>
-						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}">
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}">
+							<span th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></span>
+						</div>
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}">
 							<span th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></span>
 						</div>
 					</div>
 				</div>
 				<!-- 총알 배송 -->
 				<!-- 일반 배송 -->
-				<div class="goods_area goods_basic wmsList" th:if="${order.wmsCartList != null and order.wmsCartList.size() > 0}">
+				<div class="goods_area goods_basic wmsList" th:if="${order.wmsCartList != null and order.wmsCartList.size() > 0}" th:style="${order.shotCartList.size() < 1 ? 'padding-top:unset;border-top:unset;' : ''}">
 					<h3>일반배송</h3>
 					<div class="goods_section wmsCartInfo cartInfo" th:each="cart, status : ${order.wmsCartList}">
 						<input type="hidden" name="applyQtySectionYn" th:value="${cart.applyQtySectionYn}" />
@@ -264,7 +267,10 @@
 						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}">
 							<span th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></span>
 						</div>
-						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}">
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}">
+							<span th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></span>
+						</div>
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}">
 							<span th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></span>
 						</div>
 					</div>
@@ -382,7 +388,10 @@
 						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}">
 							<span th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></span>
 						</div>
-						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}">
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}">
+							<span th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></span>
+						</div>
+						<div class="goods_txt" th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}">
 							<span th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></span>
 						</div>
 
@@ -682,7 +691,7 @@
 			$(document).ready(function() {
 				setLoginInfo();
 
-				if([[${!order.shotCanYn.equals('Y')}]]) {
+				if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
 					//$(".shotDelvSelect").hide();
 				}
 
@@ -700,6 +709,12 @@
 			function serialCpnApply() {
 				let cartArr = [];
 				let currPrices = [];
+
+				if(!$("#serialCpnNm").val()) {
+					mcxDialog.alert("할인코드를 입력해주세요.");
+					return false;
+				}
+
 				$("#cartListForm input[name=cartSqArr]:checked").each(function(index, item) {
 					cartArr.push($(this).val());
 					currPrices.push($(this).parents(".cartInfo").find("input[name=tmtbDcAmt]").val());
@@ -784,6 +799,10 @@
 
 							$(".cartCpnInfoModal .availDt").html('<span>' + cpnInfo.availStdtTime + "</span> ~ <span>" + cpnInfo.availEddtTime + "</span>");
 							$(".cartCpnInfoModal .refVal").html(refValComment);
+
+							if(cpnInfo.downloadCnt > 0) {
+								mcxDialog.alert("성공적으로 등록되었습니다.");
+							}
 						} else {
 							mcxDialog.alert(result.serialCpnInfo.result);
 						}
@@ -999,7 +1018,7 @@
 							// 혹시 else일 경우
 							fnOrderValidation(list, listIndex, cartSqArr, allYn);
 						}
-					} else if (info.ordCanQty < info.goodsQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
+					} else if (info.ordCanQty < info.goodsQty && info.ordCanQty != info.maxOrdQty) {
 						let message;
 						if ("G056_S" == info.goodsType) {
 							message = info.goodsNm + " 의" + info.itemNm + "/" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
@@ -1007,13 +1026,13 @@
 							message = info.goodsNm + " 의" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
 						}
 
-						fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
-					} else if (info.goodsQty < info.minOrdQty) {
+						fnUpdateConfirmChangeQty(message, info.cartSq, info.ordCanQty, list, listIndex, cartSqArr, allYn);
+					} else if (info.goodsQty < info.minOrdQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
 						let message = info.goodsNm + " 의 최소 구매수량은 " + info.minOrdQty + "개입니다.\n최소 구매 수량으로 주문하시겠습니까?";
 						fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
 					} else if (info.goodsQty > info.maxOrdQty) {
 						let message = info.goodsNm + " 의 최대 구매 사능 수량은 " + info.maxOrdQty + "개입니다. 최대 구매 가능한 수량으로 주문하시겠습니까?";
-						fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
+						fnUpdateConfirmChangeQty(message, info.cartSq, info.maxOrdQty, list, listIndex, cartSqArr, allYn);
 					} else if (listIndex < list.length) {
 						fnOrderValidation(list, listIndex, cartSqArr, allYn);
 					} else {
@@ -1232,7 +1251,8 @@
 						return false;
 					}
 
-					confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
+					// confirmMessage = "총 " + cartArr.length + "개의 상품을 삭제합니다.";
+					confirmMessage = "선택한 상품을 삭제하시겠습니까?";
 				} else {
 					cartArr.push(gbn);
 					deleteCartAjax(cartArr, menu);

+ 19 - 8
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -158,20 +158,34 @@
 		$(document).on('click','.optModifyPop01 .number_count .minus',function(e){
 			var $input = $(this).parent().find('input');
 			var count = parseInt($input.val()) - 1;
-			count = count < 1 ? 1 : count;
+			var minOrdQty = $(this).parent().parent().find(".minOrdQty").val();
+
+			count = count < minOrdQty ? minOrdQty : count;
 			$input.val(count);
 			$input.change();
-			//수량1개 이하 감소버튼 비활성화
-			if ($input.val() == 1) {
+			//주문 최소 수량 이하 감소버튼 비활성화
+			if ($input.val() == minOrdQty) {
 				$('.optModifyPop01 .number_count .minus').addClass('min_val');
 			}
+
+			$('.optModifyPop01 .number_count .plus').removeClass('min_val');
+
 			return false;
 		}).on('click','.optModifyPop01 .number_count .plus',function(e){
 			var $input = $(this).parent().find('input');
-			$input.val(parseInt($input.val()) + 1);
+			var count = parseInt($input.val()) + 1;
+			var maxOrdQty = $(this).parent().parent().find(".maxOrdQty").val();
+
+			count = count > maxOrdQty ? maxOrdQty : count;
+			$input.val(count);
 			$input.change();
-			//수량2개 이상부터 감소버튼 활성화
+			//주문 최대 수량 이상 증가버튼 비활성화
+			if ($input.val() == maxOrdQty) {
+				$('.optModifyPop01 .number_count .plus').addClass('min_val');
+			}
+
 			$('.optModifyPop01 .number_count .minus').removeClass('min_val');
+
 			return false;
 		}).on('keyup','.optModifyPop01 .number_count input[type=text]',function(e){
 			//텍스트, 0 입력금지
@@ -226,9 +240,6 @@
 						let img = color[i].cartImgList[j];
 						if(optCd1 == img.colorCd && img.defaultImgYn == "Y") {
 							imgHtml += '<img src="' + _uploadGoodsUrl + "/" + img.sysImgNm + '?RS=100" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png" alt="' + img.sysImgNm + '" />\n';
-							/*imgHtml += "<li>\n<span class='thumb'>\n";
-							imgHtml += "<img src='" + _uploadGoodsUrl + "/" + img.sysImgNm + "' onerror='this.src='" + [[${@environment.getProperty('domain.uximage')}]] + "/images/pc/thumb/bg_item_none.png' alt='" + img.sysImgNm + "' />\n";
-							imgHtml += "</span>\n</li>\n";*/
 						}
 					}
 				}

+ 24 - 12
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -34,11 +34,11 @@
 							<td>
 								<div class="form_field">
 									<div>
-										<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y')}">
+										<input type="radio" name="shotDelvUseYn" id="blt_ship1" value="Y" th:checked="${order.shotDelvUseYn != null and order.shotDelvUseYn.equals('Y') and order.shotCartList.size() > 0}">
 										<label for="blt_ship1"><span><em class="tag primary_line">총알배송</em><span th:text="|${order.shotDelvDt}일 24:00 까지 도착|"></span></span></label>
 									</div>
 									<div>
-										<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${order.shotDelvUseYn != null and !order.shotDelvUseYn.equals('Y')}">
+										<input type="radio" name="shotDelvUseYn" id="blt_ship2" value="N" th:checked="${order.shotDelvUseYn == null or !order.shotDelvUseYn.equals('Y') or order.shotCartList.size() < 1}">
 										<label for="blt_ship2"><span>총알 배송 안함</span></label>
 									</div>
 								</div>
@@ -145,7 +145,8 @@
 													<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
-													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}" th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
 												</div>
 											</div>
 											<div class="calc_box">
@@ -252,7 +253,8 @@
 														<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 														<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
-														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
+														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}" th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></p>
+														<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
 													</div>
 												</div>
 											</div>
@@ -370,7 +372,8 @@
 													<p th:if="${cart.soldoutYn.equals('Y') and cart.ordCanYn.equals('Y')}">품절된 상품입니다.</p>
 													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty < cart.minOrdQty}" th:text="|해당 상품은 최소 ${cart.minOrdQty}개부터 구매 가능합니다.|"></p>
-													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty >= cart.ordCanQty and cart.goodsQty > cart.ordCanQty}" th:text="|해당 상품은 최대 ${cart.ordCanQty}개까지 구매 가능합니다.|"></p>
+													<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y') and cart.maxOrdQty < cart.ordCanQty and cart.goodsQty > cart.maxOrdQty}" th:text="|해당 상품은 최대 ${cart.maxOrdQty}개까지 구매 가능합니다.|"></p>
 												</div>
 											</div>
 											<div class="calc_box">
@@ -556,8 +559,8 @@
 		$(document).ready(function() {
 			setLoginInfo();
 
-			if([[${!order.shotCanYn.equals('Y')}]]) {
-				$(".shotDelvSelect").hide();
+			if([[${!order.shotCanYn.equals('Y') or order.shotCartList.size() < 1}]]) {
+				//$(".shotDelvSelect").hide();
 			}
 
 			$("#cartListForm .area_salecoupon .coupon_box").hide();
@@ -693,6 +696,12 @@
 		function serialCpnApply() {
 			let cartArr = [];
 			let currPrices = [];
+
+			if(!$("#serialCpnNm").val()) {
+				mcxDialog.alert("할인코드를 입력해주세요.");
+				return false;
+			}
+
 			$("#cartListForm input[name=cartSqArr]:checked").each(function(index, item) {
 				cartArr.push($(this).val());
 				currPrices.push($(this).parents(".cartInfo").find("input[name=tmtbDcAmt]").val());
@@ -722,7 +731,6 @@
 						let cpnInfo = result.serialCpnInfo;
 						$("#cartListForm .area_salecoupon .coupon_box").show();
 
-						// 합계 금액
 						// 합계 금액
 						if(cartArr.length > 0) {
 							$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt - cpnInfo.dcAmt).toLocaleString());
@@ -782,6 +790,10 @@
 
 						$(".cartCpnInfoModal .availDt").html('<span>' + cpnInfo.availStdtTime + "</span> ~ <span>" + cpnInfo.availEddtTime + "</span>");
 						$(".cartCpnInfoModal .refVal").html(refValComment);
+
+						if(cpnInfo.downloadCnt > 0) {
+							mcxDialog.alert("성공적으로 등록되었습니다.");
+						}
 					} else {
 						mcxDialog.alert(result.serialCpnInfo.result);
 					}
@@ -1018,7 +1030,7 @@
 						// 혹시 else일 경우
 						fnOrderValidation(list, listIndex, cartSqArr, allYn);
 					}
-				} else if (info.ordCanQty < info.goodsQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
+				} else if (info.ordCanQty < info.goodsQty && info.ordCanQty != info.maxOrdQty) {
 					let message;
 					if ("G056_S" == info.goodsType) {
 						message = info.goodsNm + " 의" + info.itemNm + "/" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
@@ -1026,13 +1038,13 @@
 						message = info.goodsNm + " 의" + info.colorNm + "/" + info.optCd2 + "의 수량이 부족합니다.\n구매가능 수량은 " + info.ordCanQty + "개입니다.\n구매가능 수량만큼 주문하시겠습니까?";
 					}
 
-					fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
-				} else if (info.goodsQty < info.minOrdQty) {
+					fnUpdateConfirmChangeQty(message, info.cartSq, info.ordCanQty, list, listIndex, cartSqArr, allYn);
+				} else if (info.goodsQty < info.minOrdQty) {		// 최소 주문 수량보다 장바구니에 적게 들어왔을 경우
 					let message = info.goodsNm + " 의 최소 구매수량은 " + info.minOrdQty + "개입니다.\n최소 구매 수량으로 주문하시겠습니까?";
 					fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
 				} else if (info.goodsQty > info.maxOrdQty) {
 					let message = info.goodsNm + " 의 최대 구매 사능 수량은 " + info.maxOrdQty + "개입니다. 최대 구매 가능한 수량으로 주문하시겠습니까?";
-					fnUpdateConfirmChangeQty(message, info.cartSq, info.minOrdQty, list, listIndex, cartSqArr, allYn);
+					fnUpdateConfirmChangeQty(message, info.cartSq, info.maxOrdQty, list, listIndex, cartSqArr, allYn);
 				} else if (listIndex < list.length) {
 					fnOrderValidation(list, listIndex, cartSqArr, allYn);
 				} else {

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

@@ -1019,7 +1019,7 @@
 			});
 
 			if(cartArr.length < 1) {
-				mcxDialog.alert("선택된 상품이 없습니다.");
+				mcxDialog.alert("삭제하실 상품을 선택해 주세요.");
 				return false;
 			}
 

+ 6 - 5
src/main/webapp/ux/mo/css/common_m.css

@@ -319,12 +319,13 @@ input[type="file"] {
   transform: translate(-50%, -50%);cursor: pointer;
 }
 .removes {
-  display: block;width:20px;height:20px;font-size: 0;text-align: center;cursor: pointer;background-color: #666666;
+  display: block;width:2rem;height:2rem;font-size: 0;text-align: center;cursor: pointer;background-color: #666666;
   position: absolute;top: 0;bottom: auto;left: auto;right: 0;
 }
 .removes::after {
-  content: '';display: inline-block;width: 20px;height: 20px;
+  content: '';display: inline-block;width: 2rem;height: 2rem;
   background: url('/images/mo/ico_btn_cls1.png') no-repeat;background-position: 50% 50%;
+  background-size:2rem;
 }
 
 
@@ -1186,7 +1187,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 .fold_head .fold_tit::after {content: ''; display: block; clear: both;}
 
 .foldGroup {width: 100%; margin-bottom: 20px;}
-.foldGroup > ul > li {position: relative; width: 100%; margin: 0px; border: 0px; border-top: 1px solid #E5E5E5; border-bottom: 1px solid #E5E5E5; box-sizing: border-box;}
+.foldGroup > ul > li {position: relative; width: 100%; margin: 0px; border: 0px; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; box-sizing: border-box;}
 .foldGroup > ul > li:first-child {border-top: 1px solid #fff;}
 .foldGroup > ul > li+li {margin:0; border-top:0px solid; box-sizing:border-box;}
 .foldGroup .fold_head,
@@ -1905,7 +1906,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 
 /* etc_closingApp */
 .app-only .guidance{width: auto;}
-.app-only .guidance{overflow: hidden;position: fixed;bottom: 0;left: 50%;z-index: 9;width: 88.888%;height: auto;margin-left: -44.444%;padding: 1.2rem 0 1.0rem;background-color: rgba(0,0,0,0.8);text-align: center;opacity: 0;}
+.app-only .guidance{overflow: hidden;position: fixed;bottom: -4rem;left: 50%;z-index: 9;width: 88.888%;height: auto;margin-left: -44.444%;padding: 1.2rem 0 1.0rem;background-color: rgba(0,0,0,0.8);text-align: center;opacity: 0;}
 .app-only .guidance:after{content: '';position: absolute;top: 0;bottom: 15px;left: 10px;width: 100%;height: 100%;z-index: -1;}
 .app-only .guidance{
     box-shadow: 0 0px 30px rgb(0 0 0 / 20%), 0 0px 30px rgb(0 0 0 / 20%);
@@ -1936,7 +1937,7 @@ button.alertCls {-webkit-appearance: none;padding: 0;cursor: pointer;background:
 /* mobile type */
 /* etc_toastPopup */
 .guidance{width: auto;}
-.guidance{overflow: hidden;position: fixed;bottom: 0;left: 50%;z-index: 9;width: 88.888%;height: auto;margin-left: -44.444%;padding: 1.2rem 0 1.0rem;background-color: rgba(0,0,0,0.8);text-align: center;opacity: 0;}
+.guidance{overflow: hidden;position: fixed;bottom: -4rem;left: 50%;z-index: 9;width: 88.888%;height: auto;margin-left: -44.444%;padding: 1.2rem 0 1.0rem;background-color: rgba(0,0,0,0.8);text-align: center;opacity: 0;}
 .guidance:after{content: '';position: absolute;top: 0;bottom: 15px;left: 10px;width: 100%;height: 100%;z-index: -1;}
 .guidance{box-shadow: 0 0px 30px rgb(0 0 0 / 20%), 0 0px 30px rgb(0 0 0 / 20%);}
 .guidance p{font-size:1.3rem;font-weight: 300;color: #fff;}

+ 21 - 12
src/main/webapp/ux/mo/css/layout_m.css

@@ -754,10 +754,10 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd .item_prod{display:block;}
 .pd .itemBrand{width:calc(100% - 10%);}
 .pd .select_custom .combo .list{max-height:100%;}
-.opt_name {margin-bottom:-2rem;}
+.opt_name {margin-bottom:0.4rem;}
 .form_field.mb20{margin-bottom:2rem !important}
 /* 210412 */
-.pd_pop.Purchase_pop div[class$="Option"] .form_wrap .form_field .select{color:#777777}
+.pd_pop.Purchase_pop div[class$="Option"] .form_wrap .form_field .select{color:#777777; text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;overflow:hidden; padding-right:4rem;}
 .pd_pop.Purchase_pop div[class$="Option"] .form_wrap .form_field .select:before{color:#333333}
 .pd_dealitem .item_prod .itemName{max-height: 3.3rem;display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 2;-webkit-box-orient: vertical;overflow: hidden;white-space: normal;overflow-wrap: break-word;width: calc(100% - 10%);}
 .pd_together .item_prod .itemName{max-height: 3.3rem;display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp: 2;-webkit-box-orient: vertical;overflow: hidden;white-space: normal;overflow-wrap: break-word;width: calc(100% - 10%);}
@@ -765,16 +765,24 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .push_restock_pop .select::-ms-expand{display:none;}
 .pd_detail .option_box .opt_size .form_field input[type="radio"] + label.on{border:1px solid #fd4802}
 .pd_line_box{padding:0.7rem; background:#f5f5f5; width:100%; margin:0 -2rem; display:block; position: absolute; bottom:0;}
-/*.pd_detail .inner{margin:0 !important;}*/
 /* 210413 */
-/*.cs_contactUs_my .form_field .select_dress::before{content:"*"; position:absolute; left:14.6rem; font-size:1.8rem; top:0.5rem; color:red}*/
-/*.cs_contactUs_my .form_field input{content:"*"; position:absolute; left:14.6rem; font-size:1.7rem; top:0.4rem; color:red}*/
 .cs .cs_contactUs_1 .foldGroup .fold_head a{padding:1.8rem 2rem 1.4rem;}
 .cs .cs_notice_1 .foldGroup .fold_head a{padding:1.8rem 2rem 1.4rem;}
 .cs .cs_product_1 .foldGroup .fold_head a{padding:1.8rem 2rem 1.4rem;}
 .pd .Purchase_pop .btPop_foot{position: absolute;width: 100%;bottom: 0; background: #fff;}
 .cs .pnb ul{padding-left:1rem}
 .push_restock_pop .item_prod .itemPercent{left:4.5rem;}
+/* 210414 */
+.pd .Purchase_pop{transition:none;}
+.cs_contactUs_my .imgUpload{margin-left:0.6rem;}
+.cs_contactUs_my .imgUpload:first-child{margin: 0;}
+.cs .fold_head {font-family:'Noto Sans kr', sans-serif;}
+.cs .fold_head .fold_tit .lap1 span{font-weight:200; font-size:1rem;}
+.cs .fold_head .fold_tit .lap2 span{font-weight:500;}
+.cs .fold_head .fold_state{padding:0.2rem 0.3rem;}
+.cs .fold_head .data{font-family: 'LATO', 'Noto Sans kr', sans-serif;}
+.Purchase_pop .select_custom .combo .list>li{padding:1.2rem; line-height:2rem; word-wrap: break-word;}
+
 
 
 /* 플롯팅 메뉴 > 구매하기 */
@@ -800,7 +808,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_pop.Purchase_pop .btPop_body{max-height:calc(100% - 14%);}
 .btPop_open .btPop.Purchase_pop{bottom:0; top:auto!important; height:84%;}
 .btPop_open .btPop.Purchase_pop .btPop_close{width:1.6rem; height:1.6rem; background-image: url(/images/mo/ico_pop_cls_w.png);}
-.pd_pop.Purchase_pop .select_custom .combo .list{position:relative; top:0;}
+.pd_pop.Purchase_pop .select_custom .combo .list{position:relative; top:0; margin-top:-0.6rem}
 .pd_pop.Purchase_pop{}
 .pd_pop.Purchase_pop .header{padding:0; font-size:0;}
 .pd_pop.Purchase_pop .option_box .opt_color{padding-top:0}
@@ -884,6 +892,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .modal.pd_pop.salecoupon_pop .coupon_list {line-height:1;}
 .modal.pd_pop.salecoupon_pop .coupon_list li {margin-top:1rem}
 .modal.pd_pop.salecoupon_pop .coupon_list li:first-child {margin-top:0}
+.modal.pd_pop.salecoupon_pop .coupon_list li:last-child{margin-bottom:3rem;}
 .modal.pd_pop.salecoupon_pop .coupon_list li .coupon {position:relative; border:1px solid #ddd; box-sizing:border-box; background:#fff;}
 .modal.pd_pop.salecoupon_pop .coupon_list li .coupon > div {position:relative; padding:3rem 0;}
 .modal.pd_pop.salecoupon_pop .coupon_list li .coupon > div::after {content:''; position:absolute; top:50%; right:-1px; transform:translateY(-50%); width:1.5rem; height:3.0rem; background:#fff; z-index:2; border:1px solid #ddd; border-right:none; border-top-left-radius:1.5rem; border-bottom-left-radius:1.5rem; overflow:hidden;}
@@ -903,7 +912,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .modal.pd_pop.salecoupon_pop button:disabled span:nth-child(1){display:none;}
 .modal.pd_pop.salecoupon_pop button:disabled span:nth-child(2){display:block;}
 .modal.pd_pop.salecoupon_pop button:disabled{background:#aaa!important; border-color:#aaa!important; opacity:1;}
-.modal.pd_pop.salecoupon_pop .modal-footer button{color: #ffffff; background-color: #fd4802; border-color: #fd4802;}
+.modal.pd_pop.salecoupon_pop .modal-footer button{color: #ffffff; background-color: #fd4802; border-color: #fd4802; position:absolute; bottom:0; z-index:999;}
 .modal.pd_pop.salecoupon_pop .modal-footer button > span{padding:0;}
 .modal.pd_pop.salecoupon_pop .modal-footer button > span::after{background:none;}
 
@@ -1130,7 +1139,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .pd_review_pop .pd_review .area_rv_empty .btn_group_flex{position:fixed; width: 100%; bottom: 0; left:0; margin-top: 0; z-index:10;}
 .pd_review{background:#f5f5f5;}
 .pd_review.best,
-.pd_review.photo{background:#fff; position:absolute; bottom:0; z-index:999;}
+.pd_review.photo{background:#fff; position:relative; bottom:0; z-index:999; max-height:35rem;}
 .pd_review [class^="area_rv"]{padding:4rem 1.33rem; margin-bottom:1.2rem; background:#fff; line-height: 1.4;}
 .pd_review .thumb {display:block; position:relative; width:100%; height:0px; line-height:0; font-size:0; padding-top:150%; background:#f5f5f5; overflow:hidden;}
 .pd_review .pic .thumb {padding-top:100%; background-repeat:no-repeat; background-position:50% 50%; background-size:cover;}
@@ -1312,7 +1321,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list .response_box2{display:none;}
 .modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list .reply_box{display:none;}
 /*.modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list.active{position:absolute; bottom:0; z-index:999;}*/
-.modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list.active {bottom:0; z-index:999;}
+.modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list.active {bottom:0; z-index:999; transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1);}
 .modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list.active .txt_review_box{height:auto; overflow:hidden;}
 .modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list.active .response_box2{display:block;}
 .modal.pd_pop[class*="reviewdetail_pop"] .pd_review .area_rv_all .review_list.active .reply_box{display:block;}
@@ -2066,7 +2075,7 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .br .pnb_mo > ul{display:flex; padding:0 0.8rem; height:5rem; line-height:5rem; background-color:#222222;}
 .br .pnb_mo > ul > li > a{font-size:1.6rem; color:#686868; font-weight:500; padding:0 1.2rem;}
 .br .pnb_mo > ul > li > a.on{color:#fff}
-.br .pnb_mo > button{background:url(/images/mo/br_plus.png) no-repeat; width:3.8rem; height:1.9rem; background-color:red; text-indent:-9999px; position:absolute; z-index:9; top:1.6rem; right:0; background-color:#222222;}
+.br .pnb_mo > button{background:url(/images/mo/ico_btn_expand.png) center top/1.8rem 2.0rem no-repeat; width:3.8rem; height:1.9rem; background-color:red; text-indent:-9999px; position:absolute; z-index:9; top:1.6rem; right:0; background-color:#222222;}
 .br_main{background-color:#fff;}
 /* br_main *
 /* br_main - 메인배너&info */
@@ -2187,9 +2196,9 @@ header .htop.trans{position:absolute; background:transparent !important;}
 .br_search_wrap .hmenu .brand_si .swiper-pagination-bullet{margin-right:0.8rem;}
 .br_search_wrap .hmenu .brand_si .swiper-pagination-bullet:last-child{margin-right:0;}
 .br_search_wrap .brand_title { width: 100%; height: 4.3rem; margin: 2.4rem 0 0; border-bottom: 0.2rem solid black; }
-.br_search_wrap .brand_title input { width: 100%; height: 4.3rem; float: left; border: none;  padding: 0; font-size: 1.6rem; font-weight: 100; color: #888; border-bottom:2px solid #000; margin-bottom:1.6rem;}
+.br_search_wrap .brand_title input { width: 100%; height: 4.3rem; float: left; border: none;  padding: 0; font-size: 1.6rem; font-weight: 100; color: #000; border-bottom:2px solid #000; margin-bottom:1.6rem;}
 .br_search_wrap .brand_title .btn_x { width: 2rem; height: 2rem; background: #aaa; border-radius: 1rem; color: #fff; font-size: 1rem; position: absolute; top: 1.2rem; right: 5rem; }
-.br_search_wrap .brand_title button img { width: 2rem; height: 2rem; position: absolute; top: 1.2rem; right: 2rem;}
+.br_search_wrap .brand_title button img { width: 2rem; height: 2rem; position: absolute; top: 1.2rem; right: 2.2rem;}
 .br_search_wrap .inner .result {padding-bottom:3rem; margin: 1.5rem 0 1rem; border-bottom:0.1rem solid #dddddd;}
 .br_search_wrap .inner:last-child .result {border:0px none;}
 .br_search_wrap .inner .result .title_abbr { font-size: 1.6rem; font-weight: 700; margin-bottom:0.6rem;}

+ 44 - 28
src/main/webapp/ux/mo/css/style24_m.css

@@ -532,6 +532,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .renew_check_tit h3 {font-size: 1.4rem; margin-bottom: 1.5rem; font-weight: 500;}
 .ev .renew_check_tit .period {font-size: 1.1rem; color: #888;}
 .ev .renew_check_tit .share_btn {position: absolute; top: 14px; right: 20px; width: 1.4rem;}
+.ev textarea, .ev input {color: #222;}
 
 /* ev_안내사항_공통 */
 .announce_txt {position: relative; padding-top: 2.5rem;}
@@ -571,8 +572,8 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .event_list .list li {margin-bottom: 0;}
 .ev .event_list .list .nodata {display: block; padding:7.6rem 0 14rem; width: 100%; text-align: center; margin-right: 0;}
 .ev .event_list .list .nodata img {width: 4rem;}
-.ev .event_list .list .nodata .txt_box::before {content:''; display:block; width:4rem; height:5.5rem; margin:0 auto 24px; background:url('/images/mo/ico_content_find02.png') no-repeat; background-size:100%;}
-.ev .event_list .list .nodata .txt_box p {display: block; margin: 1.5rem 0 2.3rem; font-size: 1.3rem; color: #666; font-weight: 300;}
+.ev .event_list .list .nodata .txt_box::before {content:''; display:none; width:4rem; height:5.5rem; margin:0 auto 24px; background:url('/images/mo/ico_content_find02.png') no-repeat; background-size:100%;}
+.ev .event_list .list .nodata .txt_box p {display: block; margin: 1.5rem 0 2.3rem; font-size: 1.3rem; color: #888; font-weight: 300;}
 .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 */
@@ -591,6 +592,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .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;}
+/* .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 {}
@@ -623,12 +625,12 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 
 .ev .survey_wrap .survey_con .survey_row .form_field input[type="checkbox"] + label:before {width: 2rem; height: 2rem;}
 
-.ev .survey_wrap .survey_con .survey_row.q3 .doc_ans {width: 100%; height: 15rem; padding: 1.5rem; font-size: 1.3rem; line-height: 1.6; color: #888; font-weight: 300; resize:none;}
+.ev .survey_wrap .survey_con .survey_row.q3 .doc_ans {width: 100%; height: 15rem; padding: 1.5rem; font-size: 1.3rem; line-height: 1.6; color: #222; font-weight: 300; resize:none;}
 .ev .survey_wrap .survey_con .survey_row.q3 .answer {position: relative;}
 .ev .survey_wrap .survey_con .survey_row.q3 .answer .txt_cnt {position: absolute; right: 1.6rem; bottom: 1.6rem; margin-top: 0; color: #888;}
 
 .ev .survey_wrap .survey_con .survey_row.q4 {padding-bottom: 0;}
-.ev .survey_wrap .survey_con .survey_row.q4 .q4_ans {width: 100%; height: 4.5rem; padding: 1rem; font-size: 1.3rem; line-height: 1.6; color: #888; font-weight: 300; resize:none;}
+.ev .survey_wrap .survey_con .survey_row.q4 .q4_ans {width: 100%; height: 4.5rem; padding: 1rem; font-size: 1.3rem; line-height: 1.6; color: #222; font-weight: 300; resize:none;}
 .ev .survey_wrap .survey_con .btn_wrap {padding: 3rem 2rem 6rem; text-align: center; background: #fff;}
 .ev .survey_wrap .survey_con .btn_wrap button.btn {width: 100%; padding:1.6rem 0; font-size: 1.4rem; font-weight: 500; height:auto;} 
 
@@ -638,18 +640,20 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev .comment .inner:last-child {padding-bottom: 0;}
 .ev .comment .input_wrap {width: 100%;}
 .ev .comment .comment_textarea {padding:0 2rem;}
-.ev .comment .comment_img {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;}
+.ev .comment .form_field {display: block; margin:0 -1% 0;}
 .ev .comment .form_field .img_file {margin:0 -0.4rem 0;}
-.ev .comment .pics {display: inline-block !important; width: calc((100% - 3.2rem) /4); height:0; margin:0 0.4rem 0.8rem; padding-top: 23.5%; border:1px solid transparent}
-.ev .comment .picsThumbs {max-width:100%; max-height:100%;}
-.ev .comment .imgUpload {width: calc((100% - 3.2rem) /4); height:100%; margin:0 0.4rem 1rem; float:left;}
-.ev .comment .fileAdd {display: inline-block; float:none; vertical-align: middle; width: 100%; height:auto; padding-top: 100%;}
-.ev .comment .btn_wrap {padding:0 2rem 3rem;}
+.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;}
+/* .ev .comment .imgUpload {width: 100%; height:100%;} */
+.ev .comment .fileAdd {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;}
 
@@ -661,8 +665,9 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .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; white-space: nowrap; font-size: 0; overflow-x: auto;}
-.ev .cmt_group .cmt_list li .cmt_cont .img_wrap .pics {float:none;}
+.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;}
@@ -675,26 +680,25 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .modal.photo_comment_popup {background: #f5f5f5; overflow:hidden;}
 .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;}
-.modal.photo_comment_popup .modal-body .pop_cont .pop_slide {position: relative; height: 46.6rem;}
+.modal.photo_comment_popup .modal-body .pop_cont {height: 100%; overflow:hidden; position: relative; padding-bottom: 13rem;}
+.modal.photo_comment_popup .modal-body .pop_cont .pop_slide {position: relative; height: 100%;}
 .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: 3.3rem; 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;}
+.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;}
 .swiper-pagination-current {font-weight: 600;}
 /* .swiper-pagination-current:before {content:'0';} */
-.modal.photo_comment_popup .pop_detail {position: absolute; left: 0; bottom:-24rem; z-index: 99; background: #fff; padding:0 2rem 2rem; box-shadow: 0px -14px 17.8px 2.2px rgba(0, 0, 0, 0.04); font-size: 1.3rem; max-height: 37rem; overflow-y:auto; transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1);}
+.modal.photo_comment_popup .pop_detail {position: fixed; left: 0; bottom: 0; width: 100%; z-index: 99; background: #fff;  box-shadow: 0px -14px 17.8px 2.2px rgba(0, 0, 0, 0.04); font-size: 1.3rem;  transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1);}
 .pop_slide .swiper-slide .img {}
 .pop_slide .swiper-slide img {width: auto; height: auto; max-height: 100%; max-width: 100%; margin: auto 0; position: absolute; top: 50%; bottom: auto; left: 50%; right: 0; transform: translate(-50%, -50%); cursor: pointer;}
-.modal.photo_comment_popup .pop_detail .pop_open_btn {background: url('/images/mo/ico_pop_arrow.png') no-repeat center; display: block; width: 100%; height: 3rem; background-position:center; background-size:3rem;}
-.modal.photo_comment_popup .pop_detail.active .pop_open_btn {background: url('/images/mo/ico_pop_arrow_on.png') no-repeat center; display: block; width: 100%; height: 3rem; background-position:center; background-size:3rem;}
-.modal.photo_comment_popup .pop_detail.active {bottom: 0;}
+.modal.photo_comment_popup .pop_detail .pop_open_btn {position: absolute; left: 0; top: 0; width: 100%; background: url('/images/mo/ico_pop_arrow.png') no-repeat center; display: block; width: 100%; height: 3rem; background-position:center; background-size:3rem;}
+.modal.photo_comment_popup .pop_detail .comment_wrap {max-height: 10rem; padding:0 2rem 2rem; margin-top: 3rem; transition: all 600ms cubic-bezier(0.86, 0, 0.07, 1);}
 .modal.photo_comment_popup .pop_detail .comment_writer {margin-top: 1.4rem;}
 .modal.photo_comment_popup .pop_detail .comment_writer .writer {margin-right: 1.2rem; padding-right: 1.2rem; border-right:1px solid #ddd; font-size: 1.1rem; color: #666;}
 .modal.photo_comment_popup .pop_detail .comment_writer .date {color: #888; font-size: 1.1rem;}
-.modal.photo_comment_popup .modal-footer {margin-top: 0;}
 
-@media screen and (max-width:320px){
-  .modal.photo_comment_popup .modal-body .pop_cont .pop_slide {height: 38.5rem;}
-}
+.modal.photo_comment_popup .pop_detail.active {}
+.modal.photo_comment_popup .pop_detail.active .pop_open_btn {background: url('/images/mo/ico_pop_arrow_on.png') no-repeat center; display: block; width: 100%; height: 3rem; background-position:center; background-size:3rem;}
+.modal.photo_comment_popup .pop_detail.active .comment_wrap {overflow-y:auto; max-height: 34rem;}
+.modal.photo_comment_popup .modal-footer {margin-top: 0;}
 
 .paging_wrap {text-align: center; margin-top: 3.6rem;}
 .paging_wrap .pageNav {display: inline-block;}
@@ -739,6 +743,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .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; }
@@ -747,6 +752,14 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .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;}
+
 
 /* ev_rank */
 .ev_rank {background: #f5f5f5;}
@@ -827,14 +840,15 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .ev_rank .member_level_area .level_head .desc p {color: #444; font-size: 1.2rem; font-weight: 500;}
 .ev_rank .member_level_area .level_content {padding:2rem;}
 .ev_rank .member_level_area .level_content:after {content:''; clear:both; display: block;}
-.ev_rank .member_level_area .level_content > div.coupon {margin-bottom: 2.4rem;}
+.ev_rank .member_level_area .level_content > div.coupon {margin-bottom: 2.4rem; border:none;}
+.ev_rank .member_level_area .level_content > div.coupon > div:after {position: static; border:none; transform:none; width:auto; height:auto; border-radius: none;}
 .ev_rank .member_level_area .level_content > div.birth {}
 .ev_rank .member_level_area .level_content > div > p {position: relative; margin-bottom: 1.3rem; font-size: 1.1rem; font-weight: 500; padding-left: 0.7rem;}
 .ev_rank .member_level_area .level_content > div > p:before {content:''; position: absolute; top: 0.6rem; left: 0; width: 0.2rem; height: 0.2rem; background: #222;}
 .ev_rank .member_level_area .level_content .coupon_box, .ev_rank .member_level_area .level_content .birth_box {padding:0 0.7rem;}
 .ev_rank .member_level_area .level_content .coupon_info {float:left; width: 46%;}
 .ev_rank .member_level_area .level_content .coupon_info:last-child {float:right;}
-.ev_rank .member_level_area .level_content .coupon_info p, .ev_rank .member_level_area .level_content .birth_info p {font-size: 1.1rem; text-align: center; margin-top: 1rem;}
+.ev_rank .member_level_area .level_content .coupon_info p, .ev_rank .member_level_area .level_content .birth_info p {font-size: 1.1rem; text-align: center; margin-top: 1rem; padding: 0;}
 .ev_rank .member_level_area .level_content .coupon_info img, .ev_rank .member_level_area .level_content .birth_info img {width: 100%;}
 .ev_rank .member_level_area .level_content .birth_info {width: 46%;}
 
@@ -918,7 +932,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .my .lnb_list li a {display: block; padding: 2rem; background: url(/images/mo/ico_lnb_arrow.png) no-repeat right 2rem center; background-size:0.7rem 1.26rem;}
 
 .my .mem_rank {position: relative; padding:1.6rem 0; padding-left: 6rem;}
-.my .mem_rank .mem_name {dib font-size: 1.8rem; font-weight: 300;}
+.my .mem_rank .mem_name {font-size: 1.8rem; font-weight: 300;}
 .my .mem_rank .mem_name strong {font-weight: 500;}
 .my .mem_rank .rank_txt {display: inline-block; font-size: 1.8rem; color: #666; font-weight: 500; padding-right: 1.7rem; background: url(/images/mo/ico_btn_detail03.png) no-repeat right top 5px; background-size:0.7rem 1.3rem;}
 .my .mem_rank .rank_txt02 button {display: inline-block; font-size: 14px; padding-right: 13px; margin-right: 20px; background: url(/images/pc/ico_mysm_arrow.png) no-repeat right top 6px;}
@@ -1363,6 +1377,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .optionChangePop .product_list {border-top: 1px solid #ddd;}
 .optionChangePop .product_list li {border-bottom: 1px solid #ddd; padding: 1.5rem;}
 
+.modal.optionChangePop .modal-body {padding-bottom: 4.5rem;}
 .modal.optionChangePop .modal-body .pop_cont {color: #222;}
 .optionChangePop .option_list li {border-bottom: 1px dashed #ddd; padding:2rem 0 0;}
 .optionChangePop .option_list li:first-child {padding-top: 0;}
@@ -1377,6 +1392,7 @@ main.container .inner h2[data-style~="unusual"] {font-size:2.0rem;top: 0;positio
 .optionChangePop .option_list li .option_box button:disabled span {text-decoration: line-through; color: #bbb;}
 .optionChangePop .option_list li .option_name {font-size: 1.4rem; font-weight: 500;}
 .optionChangePop .option_list li .option_field {margin-top: 1.5rem;}
+.optionChangePop .modal-footer {position: fixed; left: 0; bottom: 0; width: 100%; margin-top: 0;}
 .optionChangePop .modal-footer .btn_group_flex {margin-top: 0;}
 
 /* my_return_3_accountPop_환불계좌등록 팝업 */
@@ -2517,4 +2533,4 @@ main.container .od_extra .inner:last-child {padding-bottom: 0;}
 .popup_main_notice.half .popup_content .popup_header {position: relative; background:transparent; height: 6rem; padding: 2.2rem;}
 .popup_main_notice.half .popup_content .popup_header::after {content:''; clear:both; display:block;}
 .popup_main_notice.half .popup_content .popup_header a.btn_underline {display:inline-block; float:left; color:#fff; font-size:1.3rem; font-weight:200; border-color:#fff; opacity: 0.4; padding-top: 0.2rem;}
-.popup_main_notice.half .popup_content .popup_header a.btn_popup_close {position: absolute; top: 0; right: 0; width: 6rem; height: 6rem; background: url(/images/mo/btn_main_pop_arrow.png) no-repeat center; background-size:1.6rem;}
+.popup_main_notice.half .popup_content .popup_header a.btn_popup_close {position: absolute; top: 0; right: 0; width: 6rem; height: 6rem; background: url(/images/mo/btn_main_pop_arrow.png) no-repeat center; background-size:1.6rem; text-indent:-999em;}