PageSourceSearch

https://www.westelm.co.kr/assets/js/eshop/mypage/mypage.js

js westelm.co.kr collected 2026-10-08 23:21:28 UTC 20,089 bytes, 469 lines download raw bytes

1$(document).ready(function(){
2
3});
4
5Map = function(){
6    this.map = new Object();
7};
8Map.prototype = {
9    put : function(key, value){
10        this.map[key] = value;
11    },
12    get : function(key){
13        return this.map[key];
14    },
15    set : function(key, value) {
16    this.map[key] = value;
17    },
18    jsonString: function() {
19        return JSON.stringify(this.map);
20    }
21};
22
23var mypage = {
24    comm : {
25        isEmpty : function(str) {
26            if(typeof(str) == "undefined" || str == null || str.trim().length == 0) {
27                return true;
28            } else {
29                return false;
30            }
31        },
32
33        setComma : function(str){
34            if (typeof(str) != "string") {
35                str = String(str);
36            }
37            return str.replace(/(\d)(?=(?:\d{3})+(?!\d))/g,"$1,");
38        },
39
40        // Check Textarea Count
41        checkTextDisplay : function (obj, id){
42            var $obj = $(obj);
43            var targetLength = $obj.val().length;
44
45            var $target;
46            if (this.isEmpty(id)) {
47                $target = $obj.next();
48            } else {
49                $target = $("#" + id);
50            }
51            //maxLength 구하기
52            var maxLength = $target.html().split("/")[1];
53
54            if (targetLength > maxLength) {
55                alert(maxLength + "자를 초과 입력 할 수 없습니다.");
56                var csutStr = $obj.val().substr(0, maxLength);
57                $obj.val(csutStr);
58                targetLength = maxLength;
59            }
60            //현재 글자수 보여주기
61            $target.html(this.setComma(targetLength) + "/" + this.setComma(maxLength));
62        },
63
64        // 조회기간 체크
65        checkPeriod : function(){
66            $("[id^=period_]").removeClass("on"); // 조회기간 직접 설정시 Button On 해제
67            var preDate = this.defaultValue;
68            var startDateArr = $("#fromDate").val().split('-');
69            var endDateArr = $("#toDate").val().split('-');
70
71            var startDateCompare = new Date(startDateArr[0], parseInt(startDateArr[1])-1, startDateArr[2]);
72            var endDateCompare = new Date(endDateArr[0], parseInt(endDateArr[1])-1, endDateArr[2]);
73            var interval =  (endDateCompare - startDateCompare) / (1000 * 60 * 60 * 24);
74
75            if(startDateCompare.getTime() > endDateCompare.getTime()) {
76                if (this.id == "fromDate") {
77                    alert("시작일자가 종료일자보다 늦습니다. 다시 선택해 주세요.");
78                } else {
79                    alert("종료일자가 시작일자보다 빠릅니다. 다시 선택해 주세요.");
80                }
81                this.value = preDate;
82
83            } else if (interval > 1825) {
84                alert("최대 5년씩 조회가 가능합니다. 조회 기간을 다시 선택해 주세요.");
85                this.value = preDate;
86
87            } else {
88                this.defaultValue = this.value;
89            }
90        },
91
92        // 조회기간 버튼 날짜설정
93        setPeriod : function(){
94            var periodType = this.id;
95            var now = new Date();
96            var day = ("0" + now.getDate()).slice(-2);
97            var month = ("0" + (now.getMonth() + 1)).slice(-2);
98            var today = now.getFullYear()+"-"+(month)+"-"+(day) ;
99
100            var $endDate = $("#toDate");
101            $endDate.datepicker("setDate", now);
102            $endDate.datepicker("option", "minDate", '-5Y+1D');
103            $endDate.datepicker("option", "maxDate", today);
104
105            var $strDate = $("#fromDate");
106            $strDate.datepicker("setDate", now);
107            $strDate.datepicker("option", "minDate", '-5Y+1D');
108            $strDate.datepicker("option", "maxDate", today);
109
110            switch (periodType) {
111            case "period_1week" :
112                $strDate.datepicker("setDate", "-7d+1d"); // 일주일
113                break;
114            case "period_1month" :
115                $strDate.datepicker("setDate", "-1m+1d"); // 1개월
116                break;
117            case "period_3month" :
118                $strDate.datepicker("setDate", "-3m+1d"); // 3개월
119                break;
120            case "period_6month" :
121                $strDate.datepicker("setDate", "-6m+1d"); // 6개월
122                break;
123            case "period_1year" :
124                $strDate.datepicker("setDate", "-1y+1d"); // 1년
125                break;
126            case "period_3year" :
127                $strDate.datepicker("setDate", "-3y+1d"); // 1년
128                break;
129            default :
130                 $strDate.datepicker("setDate", "-1m+1d");
131            }
132            $("[id^=period_]").removeClass("on");
133            $("#" + periodType).addClass("on");
134        }
135    },
136
137    order : {
138        // 전자영수증 레이어
139        openReceiptDigital : function(ordSn, bookYn){
140            var data = {ordSn:ordSn, bookIncmDedtYn:bookYn};
141            var url = "/mypage/openPopupDigitalReceipt";
142            this.openLayer(data, url);
143        },
144
145        // 현금영수증신청 레이어
146        openReceiptCash : function(ordSn, bookYn){
147            var data = {ordSn:ordSn, bookIncmDedtYn:bookYn};
148            var url = "/mypage/openPopupCashReceipt";
149            this.openLayer(data, url);
150        },
151
152        // 배송조회
153        traceDelivery : function(ordClmScnCd, ordClmSn, ordClmDtlSeq){
154            var delv;
155            $.ajax({
156                url : "/mypage/traceDelivery",
157                contentType: "application/json",
158                dataType : "json",
159                async: false,
160                data : {ordClmScnCd:ordClmScnCd, ordClmSn:ordClmSn, ordClmDtlSeq:ordClmDtlSeq},
161                success : function (result) {
162                    if (result.resultCode == "00"){
163                        delv = result.resultData;
164
165                        if(delv.dlvProcTypeCd == "20"){
166                        	if (delv.invNo == null || delv.invNo == "") {
167                                alert("운송장번호가 등록되지 않았습니다.");
168                                return;
169                            } else if (delv.corpUrl == null || delv.corpUrl == "") {
170                        		alert("택배사 정보가 올바르지 않습니다.");
171                        		return;
172                        	}
173                        }
174
175                        mypage.order.openDelivery(delv.dlvSn, ordClmSn, ordClmDtlSeq);    // 배송팝업내용조회
176                    }
177                }
178            });
179        },
180
181        // 배송조회 레이어
182        openDelivery : function(dlvSn, ordClmSn, ordClmDtlSeq){
183            var data = {dlvSn:dlvSn, ordClmSn:ordClmSn, ordClmDtlSeq:ordClmDtlSeq};
184            var url = "/mypage/openPopupDelivery";
185            this.openLayer(data, url);
186        },
187
188        // 레이어 오픈
189        openLayer : function(data, url){
190            $.ajax({
191                url:url,
192                type :"POST",
193                dataType:"html",
194                data:data,
195                success: function (result) {
196                    $(".mypage").find("div.modal").replaceWith(result);
197                    $(".mypage").find("div.modal").attr("id", "mypage-layer");
198                    util.modalOpen($("#mypage-layer"), $(this));  // call function front-common.js
199                  }
200            });
201        },
202
203        /*// 외부업체 배송조회
204        corpDelivery : function(invNo, url){
205            if (invNo == null || invNo == "") {
206                alert("운송장번호가 등록되지 않았습니다.");
207                return;
208            } else if (url == null || url == "") {
209                alert("택배사 정보가 올바르지 않습니다.");
210                return;
211            }
212
213            var callUrl = url + invNo;
214            var popWidth  = "600";
215            var popHeight = "800";
216            var screenWidth  = window.screen.availWidth;
217            var screenHeight = window.screen.availHeight;
218            var popX = (screenWidth  - popWidth ) / 2;
219            var popY = (screenHeight - popHeight) / 2;
220
221            var windowAttr = "toolbar=no, scrollbars=yes, resizable=yes, left=" + popX + ", top=" + popY +", width=" + popWidth +", height=" + popHeight;
222            window.open(callUrl, "_blank", windowAttr);
223        },*/
224
225        // 영수증관리 전표 조회 (신용카드, 현금영수증)
226        openReceiptEvidence : function(param){
227
228            var payMeanCd = param.get("payMeanCd");
229            var tradeNo   = param.get("tradeNo");
230            var ordSn     = param.get("ordSn");
231            var payAmt    = param.get("payAmt");
232
233            var url;
234            var popWidth;
235            var popHeight;
236            var screenWidth;
237            var screenHeight;
238            var popX;
239            var popY;
240
241            switch (payMeanCd) {
242                case "110" :    // 신용카드
243                    url = "http://admin8.kcp.co.kr/assist/bill.BillActionNew.do?cmd=card_bill&tno=" + tradeNo + "&order_no=" + ordSn + "&trade_mony=" + payAmt;
244                    popWidth  = "470";
245                    popHeight = "815";
246                    break;
247                case "120" :    // 실시간계좌이체
248                case "130" :    // 가상계좌
249                    url = "http://admin8.kcp.co.kr/assist/bill.BillActionNew.do?cmd=cash_bill&cash_no=" + tradeNo + "&order_id=" + ordSn + "&trade_mony=" + payAmt;
250                    popWidth  = "420";
251                    popHeight = "670";
252                    break;
253                case "140" :    // 네이버페이 카드
254                case "150" :    // 네이버페이 계좌
255                    url = "https://order.pay.naver.com/home";
256                    popWidth  = "475";
257                    popHeight = "775";
258                    break;
259                case "160" :    // 페이코
260                    url = "https://bill.payco.com/outseller/receipt/" + tradeNo + "?receiptKind=card";
261                    popWidth  = "470";
262                    popHeight = "695";
263                    break;
264                default :
265                    break;
266            }
267
268            screenWidth  = window.screen.availWidth;
269            screenHeight = window.screen.availHeight;
270            popX = (screenWidth  - popWidth ) / 2;
271            popY = (screenHeight - popHeight) / 2;
272
273            var windowAttr = "toolbar=no, scrollbars=yes, resizable=yes, left=" + popX + ", top=" + popY +", width=" + popWidth +", height=" + popHeight;
274            window.open(url, "_blank", windowAttr);
275        },
276
277        // 구매확정 처리
278        fixOrder : function(ordSn, ordDtlSeq, goodsSn, isMember){
279            if(confirm("주문하신 상품에 대한 구매확정을 하시겠습니까?")){
280                var data = {ordSn:ordSn, ordDtlSeq:ordDtlSeq};
281                $.ajax({
282                    url : "/mypage/orderPurchaseConfirm",
283                    contentType: "application/json",
284                    dataType : "json",
285                    data : data,
286                    success : function(result){
287                        if(result.resultCode == "00"){
288                            // 주문상태 및 버튼 Refresh
289                            var key = "[data-ordKey=" + ordSn + "_" + ordDtlSeq + "]";
290                            $(key).eq(0).text("구매확정");
291                            var convHtml = '<a href="javascript:;" onclick="mypage.order.locReview(\'' + isMember + '\', \'' + ordSn+ '\', \'' + ordDtlSeq + '\');" class="btn btn-other xsml"><span>리뷰등록</span></a>';
292                            convHtml += '<a href="javascript:;" onclick="mypage.order.reOrder(\'' + goodsSn + '\');" class="btn btn-other xsml"><span>재구매</span></a>';
293                            $(key).eq(1).replaceWith(convHtml);
294
295                            var msg = "구매가 확정되었습니다. 리뷰를 남겨주시면 최대 100H.Point를 추가 적립해 드립니다. 리뷰를 작성하시겠습니까?";
296                            mypage.order.locReview(isMember, ordSn, ordDtlSeq, msg);
297                        }else{
298                            alert(result.resultMsg);
299                        }
300                    }
301                });
302            }
303        },
304
305        /**
306         * 상품 유효상태 확인
307         * @param goodsSn
308         * @param rstType : 재구매 호출시 Y, 해당 function을 바로 호출하는 경우 생략가능
309         */
310        goodsStat : function(goodsSn, rstType){
311            var rstflg = false;
312            $.ajax({
313                url : "/mypage/getGoodsStat",
314                contentType: "application/json",
315                dataType : "json",
316                async: false,
317                data : {goodsSn:goodsSn},
318                success : function (result) {
319                    if (result.resultCode == "00"){
320                        var g = result.resultData;
321
322                        // 상품상세 이동
323                        if (typeof(rstType) == "undefined" || rstType == "N") {
324                            if(g.goodsStCd == "10" || g.goodsStCd == "20" || g.goodsStCd == "30"){
325                                location.href="/p/" + goodsSn;    // 판매중, 일시품절인 경우 상품상세로 이동
326                            } else {
327                                alert("해당 상품은 " + g.goodsStNm + " 되었습니다.");    // 일시품절, 판매중지
328                            }
329                        // 재구매
330                        } else {
331                            if (g.goodsStCd == "10" || g.goodsStCd == "30") {
332                                rstflg = true;    // 판매중인 경우에만 장바구니 담기
333                            } else {
334                                alert("해당 상품은 " + g.goodsStNm + " 되었습니다.");    // 일시품절, 판매중지
335                            }
336                        }
337                    }
338                }
339            });
340            return rstflg;
341        },
342
343        // 재구매
344        reOrder : function(goodsSn){
345            if (!mypage.order.goodsStat(goodsSn, "Y")) {  // 상품상태 체크
346                return;
347            }
348            if(confirm("해당 상품을 재구매하시겠습니까?")){
349                var data = {"cartVOList":[ {"cartVOList":[{"goodsSn":goodsSn,"qty":1}],"goodsType":"01"} ]};
350                $.ajax({
351                    url : "/cart/insert",
352                    method : "post",
353                    dataType : "json",
354                    contentType: "application/json",
355                    data : JSON.stringify(data),
356                    success : function (result) {
357                        if(result.resultCode == "00"){
358                        	var confirmMsg = "상품이 장바구니에 담겼습니다. 장바구니를 확인하시겠습니까?";
359                        	if(result.resultData.isMergingYn=="Y"){
360                        		confirmMsg = "선택하신 상품이 이미 존재하여 상품 수량이 추가되었습니다.\n확인을 클릭하시면 장바구니 페이지로 자동 이동됩니다.";
361                        	}
362                            if(confirm(confirmMsg)){
363                                location.href = "/cart";
364                            }
365                        }else{
366                            alert(result.resultMsg);
367                        }
368                    }
369                });
370            }
371        },
372
373        // 주문상세 이동
374        orderDetail : function(isMember, ordSn){
375            var url = (isMember == "Y") ? "/mypage/orderDetail?ordSn=" : "/guest/orderDetail?ordSn=";
376            location.href=url + ordSn;
377        },
378
379        // 리뷰등록
380        locReview : function(isMember, ordSn , ordDtlSeq, msg){
381            if (mypage.comm.isEmpty(msg)) {
382                msg = "리뷰등록 하시겠습니까? 작성 가능한 리뷰화면으로 이동 됩니다.";
383            }
384            if(confirm(msg)){
385            	var data = "ordSn=" + ordSn +"&ordDtlSeq="+ordDtlSeq;
386                // (isMember == "Y") ? windowPop("/mypage/reviewRgstPopUp?"+data, "reviewRgstPopUp", '980, 1000') : windowPop("/guest/reviewRgstPopUp?"+data, "reviewRgstPopUp", '980, 1000');
387                location.href = "/mypage/reviewList";
388            }
389        }
390    },
391
392    /** 나의 문의내역 */
393    inquiry : {
394        init: function(){
395
396        }, bind: {
397
398        }, action: {
399            delCtnt: function (blbSn, type) {
400                var msg = "";
401                if(type=="inquiry"){
402                    msg = $.eshop.msg.confirm.inqDelete; // "등록하신 문의를 삭제합니다.";
403                } else if(type=="qna"){
404                    msg = $.eshop.msg.confirm.qnaDelete; //"등록하신 Q&A를 삭제합니다.";
405                } else {   // voc
406                    msg = $.eshop.msg.confirm.vocDelete; //"등록하신 고객의소리를 삭제합니다.";
407                }
408                if(confirm(msg)){
409                    $.ajax({
410                        url : "/mypage/inquiry/delCtnt",
411                        dataType : "json",
412                        data : {"blbSn" : blbSn},
413                        success : function (result) {
414                            if(type=="inquiry"){
415                                location.href="/mypage/inquiry";
416                            } else if(type=="qna"){
417                                location.href="/mypage/inquiry?typeMstId=qna";
418                            } else {   // voc
419                                location.href="/mypage/inquiry?typeMstId=voc";
420                            }
421                        }
422                    });
423                }
424            }
425        }, popup: {
426            openInqPop: function (pageType, blbSn) {
427                /*pageType: main-마이페이지 메인, etc-그외*/
428                if(pageType == "main"){
429                    windowPop('/mypage/inquiry/inquiryPop?pageType=main', 'pop_1', '980, 1000');
430                } else {
431                    if(arguments.length == 1){  // 등록페이지
432                        windowPop('/mypage/inquiry/inquiryPop?', 'pop_1', '980, 1000');
433                    } else {  // 수정페이지
434                        windowPop('/mypage/inquiry/inquiryPop?blbSn=' + blbSn, 'pop_1', '980, 1000');
435                    }
436                }
437            }
438        }
439    },
440
441    member : {}
442}
443
444/** 동적 추가요소 이벤트 부여 ***********************************************************************************/
445
446// 기간조회 달력 및 버튼 이벤트
447$(document).on("change", "input[period-valid-check]", mypage.comm.checkPeriod);
448$(document).on("click",  "a[name=mypage_period]",     mypage.comm.setPeriod);
449
450// 상품정보 예약구매 툴팁
451$(document).on("mouseover", ".tool-tip", function(){$(this).next(".tooltip-box").show();});
452$(document).on("mouseout",  ".tool-tip", function(){$(this).next(".tooltip-box").hide();});
453
454// 전자영수증 출력
455$(document).on("click",  "#btn_receipt_print", function(e){
456    e.preventDefault();
457    var initBody = document.body.innerHTML;
458    window.onbeforeprint = function() {
459        var printHtml = "<div class='mypage'>" + $("#mypage-layer").wrap("<div/>").parent().html() + "</div>";
460        document.body.innerHTML = printHtml;
461    }
462    window.onafterprint = function(){
463        document.body.innerHTML = initBody;
464    }
465    window.print();
466    util.modalClose($("#mypage-layer"), $(this));
467});
468
469/*************************************************************************************/

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.