2606_UIUX_27 수정 내역

https://contents.k-village.co.kr/front/mobile/css/layout.css

@@ -365,11 +365,12 @@ color: rgba(0, 0, 0, 1);}
 .popup-wrap .popup .popup__title--fit {padding-left: 0;}
 .popup-wrap .cont-wrap--fit {padding-top: 0;}
 .popup-wrap.full .cont-wrap--fit {padding-top: 0;}
-.popup-wrap .popup .popup__content .popup__message {font-size:16px;line-height:25px;font-weight:400;}
+.popup-wrap .popup .popup__content .popup__message {font-size:16px;line-height:25px;}
 .popup-wrap .popup .popup__content .popup__message--primary {font-size:18px;line-height:26px;}
+.popup-wrap .popup .popup__content .popup__message--info {font-size:14px;line-height:normal;}
 .popup-wrap .popup .popup__content .popup__message ~ .popup__message {margin-top: 20px;}
 .popup-wrap .popup .popup__content .popup__message ~ .popup__message--desc {margin-top: 5px;}
-.popup-wrap .popup .popup__content .popup__message .lined-text {position:relative;display:inline-block;font-size:inherit}
+.popup-wrap .popup .popup__content .popup__message .lined-text {position:relative;display:inline-block;font-size:inherit;font-weight:inherit;}
 .popup-wrap .popup .popup__content .popup__message .lined-text::before {content:"";position: absolute;bottom:0;left:0;right:0;height: 1px;background-color: #000;}
 
 .quantity-control { font-size: 0; }
@@ -784,7 +785,7 @@ touch-action: pan-y;}
 	background-size:20px;}
 .quick-wrap.hide .quick-close{    transform: rotate(180deg);}
 
-.top-btn{position: fixed; right: 21px; bottom: 90px; cursor: pointer; z-index: 16;text-align: right; display:flex; flex-direction:column-reverse; align-items:flex-end; transition:transform .3s;}
+.top-btn{position: fixed; right: 21px; bottom: calc(90px + env(safe-area-inset-bottom, 0px)); cursor: pointer; z-index: 16;text-align: right; display:flex; flex-direction:column-reverse; align-items:flex-end; transition:transform .3s;}
 .top-btn.down{transform:translateY(60px)}
 .top-btn a{display:inline-block;width: 36px; height: 36px;margin:15px 0 0 0;}
 .top-btn [data-menuanchor="top"] {display:none; order:-1;}
@@ -2023,7 +2024,6 @@ p.essen {font-size: 12px;    margin: 8px 0}
     height: 1px;
     background: #000;
 }
-.popup-wrap.change-address .popup header {border-bottom: 1px solid #ccc;}
 .popup-wrap.change-address .div-header h1 {
     font-size: 18px;
     font-weight: 500;
@@ -2113,6 +2113,10 @@ p.essen {font-size: 12px; margin: 8px 0}
 .popup-wrap.change-address .btcon2 .box-type-select {
     color: #888;
     -webkit-text-fill-color: #888;
+     height: 36px;
+     padding-inline: 18px;
+     border: 1px solid #ddd;
+     line-height: 36px;
     font-weight: 500;
 }
 .popup-wrap.pop-recash header {border-bottom: 1px solid #ccc;}
@@ -2225,8 +2225,6 @@ p.essen {font-size: 12px;    margin: 8px 0}
 }
 
 .popup-wrap.mypage-dis header {border-bottom: 1px solid #ccc;}
-.popup-wrap.send-mail header {border-bottom: 1px solid #ccc;}
-.popup-wrap.pw-change .popup__message--primary {margin-block: 10px 30px;}
 
 /* UIUX4차 68 기획전, 이벤트 타임세일 */
 .event-bnr .bnr-txt.white strong

OD-002_order_detail.html

@@ -7017,7 +7017,19 @@ groobee("serviceKey", "b5f0d6a3640e43a5ba78da779afdb0f5");
         {
            // const regExp = /[\{\}\[\]\/?.,;:|\)*~`!^\-+<>@\#$%&\\\=\(\'\"]/gi;
            // el.value = el.value.replace(regExp, "")
-            el.value = el.value.replace(/[^(ㄱ-힣a-zA-Z)]/gi, '').replaceAll('\(','').replaceAll('\)','');
+            var inputValue = el.value;
+            el.value = inputValue.replace(/[^ㄱ-힣a-zA-Z]/g, '');
+            if(inputValue !== el.value)
+            {
+                if(typeof alertOpen === 'function')
+                {
+                    alertOpen("commonAlert", '한글 또는 영문만 입력 가능합니다.', false, "alertOk");
+                }
+                else
+                {
+                    alert('한글 또는 영문만 입력 가능합니다.');
+                }
+            }
             el.value = el.value.substr(0, maxlength);
         }
         else
@@ -8495,10 +8507,8 @@ groobee("serviceKey", "b5f0d6a3640e43a5ba78da779afdb0f5");
 <div class="popup-wrap full change-address">
     <div class="popup">
         <div class="layer-container">
-            <header class="flex">
-                <div class="div-header mt-0">
-                    <h1>배송지 변경</h1>
-                </div>
+            <header class="popup__header flex">
+                <h1 class="popup__title">배송지 변경</h1>
                 <div class="flex end margin">
                     <button class="close">
                         <div class="box">
@@ -8517,6 +8527,8 @@ groobee("serviceKey", "b5f0d6a3640e43a5ba78da779afdb0f5");
                 <div class="b-tab-cont btcon1" style="display: block;">
 
                     <div class="div-middle">
+                        <!-- [D] 등록된 배송지가 없을 때 다음 요소가 렌더링 -->
+                        <p class="no-data">등록된 배송지가 없습니다.</p>
                     </div>
                     <div class="my-addr-list">
                         <div class="my-addr on">
@@ -8653,8 +8665,8 @@ groobee("serviceKey", "b5f0d6a3640e43a5ba78da779afdb0f5");
                         </div>
                     </div>
                     <div class="input-holder flex mt-15 addr-save">
-                        <input id="cbox-01" class="cbox-type" type="checkbox" name="cbox-1" value="" checked="">
-                        <label for="cbox-01" class="_img">배송지 목록에 추가</label>
+                        <input id="cbox-06" class="cbox-type" type="checkbox" name="cbox-addDlvp" value="" checked="">
+                        <label for="cbox-06" class="_img">배송지 목록에 추가</label>
                         <input id="cbox-02" class="cbox-type" type="checkbox" name="cbox-baseDlvp" value="">
                         <label for="cbox-02" class="_img">기본배송지로 저장</label>
                     </div>

@@ -9108,8 +9108,10 @@ groobee("serviceKey", "149537f7f34642698831c8fc30f4501f");
                     </div>
                     <div class="div-middle">
                         <h4 class="label">받는 분<span class="essen">*</span></h4>
-                        <div class="input-holder">
-                            <input class="txt-type-normal" placeholder="이름" id="rcpntNew" oninput="fn_HandleOnInput(this, 5,'text', event)" oncompositionend="fn_HandleOnInput(this, 5,'text')">
+                        <div class="flex">
+                            <div class="input-holder">
+                                <input class="txt-type-normal" placeholder="이름" id="rcpntNew" oninput="fn_HandleOnInput(this, 5,'text', event)" oncompositionend="fn_HandleOnInput(this, 5,'text')">
+                            </div>
                         </div>
                     </div>
                     <div class="div-middle phone">
@@ -9181,21 +9183,20 @@ groobee("serviceKey", "149537f7f34642698831c8fc30f4501f");
                         <label for="cbox-02" class="_img">기본배송지로 저장</label>
                     </div>
                     <div class="div-middle">
-                        <div class="input-holder">
-                            <select class="box-type-select sb-n" id="sltDlvyRequestNew" onchange="fn_setDlvyRequest2(this.value);">
-                                <option value="" class="placeholder">배송 요청사항 (선택)</option>
-                                <option value="빠른 배송 부탁드립니다.">빠른 배송 부탁드립니다.</option>
-                                <option value="배송 전, 연락주세요.">배송 전, 연락주세요.</option>
-                                <option value="부재 시, 연락처로 연락주세요.">부재 시, 연락처로 연락주세요.</option>
-                                <option value="부재 시, 경비실에 맡겨주세요.">부재 시, 경비실에 맡겨주세요.</option>
-                                <option value="경비실이 없습니다. 배송전, 연락주세요.">경비실이 없습니다. 배송전, 연락주세요.</option>
-                                <option value="self">직접 입력</option>
-                            </select>
-                            <div class="input-holder mt-15">
-                                <input class="txt-type-normal" placeholder="최대 20자 입력" id="iptDlvyRequestNew" disabled="" oninput="fn_HandleOnInput(this, 20)">
-                            </div>
-                            <input type="hidden" id="hidTotalDlvpNoNew" value="">
+                        <h4 class="label">배송 요청사항</h4>
+                        <select class="box-type-select sb-n" id="sltDlvyRequestNew" onchange="fn_setDlvyRequest2(this.value);">
+                            <option value="" class="placeholder">배송 요청사항 (선택)</option>
+                            <option value="빠른 배송 부탁드립니다.">빠른 배송 부탁드립니다.</option>
+                            <option value="배송 전, 연락주세요.">배송 전, 연락주세요.</option>
+                            <option value="부재 시, 연락처로 연락주세요.">부재 시, 연락처로 연락주세요.</option>
+                            <option value="부재 시, 경비실에 맡겨주세요.">부재 시, 경비실에 맡겨주세요.</option>
+                            <option value="경비실이 없습니다. 배송전, 연락주세요.">경비실이 없습니다. 배송전, 연락주세요.</option>
+                            <option value="self">직접 입력</option>
+                        </select>
+                        <div class="input-holder mt-5">
+                            <input class="txt-type-normal" placeholder="최대 20자 입력" id="iptDlvyRequestNew" disabled="" oninput="fn_HandleOnInput(this, 20)">
                         </div>
+                        <input type="hidden" id="hidTotalDlvpNoNew" value="">
                     </div>
                 </div>
             </div>

https://contents.k-village.co.kr/front/mobile/js/commonFx.js

@@ -6,6 +6,8 @@ var CALLBACK_FUNC;
 
 let scrollPosition = 0;
 var isSearch = false;
+var isBodyScrollLocked = false;
+var beforeBodyStyle = "";
 
 var createMenu = function(){
 
@@ -527,13 +529,33 @@ function resizeFx(){
 }
 function overflowFx($isHidden){
 	if($isHidden){
-		$("body").css({"height":"100%","overflow":"hidden"});
+		if(isBodyScrollLocked) return;
+
+		var $body = $("body");
+		scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
+		beforeBodyStyle = $body.attr("style") || "";
+		$body.css({
+			"height":"100%",
+			"overflow":"hidden",
+			"position":"fixed",
+			"top":"-" + scrollPosition + "px",
+			"left":"0",
+			"right":"0",
+			"width":"100%"
+		});
+		isBodyScrollLocked = true;
 	} else {
-		$("body").removeAttr("style");
+		if(beforeBodyStyle) {
+			$("body").attr("style", beforeBodyStyle);
+		} else {
+			$("body").removeAttr("style");
+		}
 		if(scrollPosition != 0 ) {
           window.scrollTo(0, scrollPosition);
           scrollPosition = 0;
         }
+        beforeBodyStyle = "";
+        isBodyScrollLocked = false;
         if(isSearch) {
             $('div.main-menu').show();
             isSearch = false;
@@ -1516,4 +1538,3 @@ $(window).on('load', function () {
 function isFunction(fn) {
     return typeof(fn) == 'function';
 }
-