PageSourceSearch

https://order.kyobobook.co.kr/assets/js/cart/state/CartState.js

js kyobobook.co.kr collected 2026-09-24 08:32:34 UTC 8,272 bytes, 178 lines download raw bytes

1export class CartState {
2    constructor() {
3        this.cartCnt = 0;
4        this.page = [];      //페이징처리
5        this.pagination = null; //페이징처리
6        this.pageUnit = 100;
7        this.cartAdBanner = null;
8        this.allList = [];
9        this.cubotList = [];
10        this.emplyYsno = ""; //임직원 여부
11        this.cartGoodsList = [];  // 장바구니상품목록
12        this.plusBtnCnt = 0;
13        this.bannerBtnCnt = 0;
14        this.ordrLmttList = []; //주문불가 상품리스트
15        this.exprPhrsCntt = ""; //주문불가 메세지
16        this.bundleDeliveryTitle = '함께 주문한 상품은<br><strong>예약/제작 상품 출고일에 맞춰</strong> 배송돼요.<br>';
17        this.bundleSplitTitle = '함께 주문한 상품은<br><strong>분철상품 출고일에 맞춰</strong> 배송돼요.<br>';
18        this.bundleKyoboDeliveryNSplitTitle = '<br>단, 분철상품의 출고일이 더 늦는 경우<br>분철상품 출고일에 맞춰 배송될 수 있어요.';
19        this.bundleSplitSameTitle = '분철상품과 분철상품의 본품은<br>함께 주문이 불가해요.<br>';
20        this.bundleSplitSameText = '<br>분철상품과 본품을 따로 주문해주세요';
21        this.bundleContinueOrdertext = '<br>주문을 계속할까요?';
22        this.bundleOverOrderSplitTitle = '분철상품은 최대 10종까지<br>함께 주문가능해요.<br>';
23        this.bundleOverOrderSplitText = '<br>분철상품의 주문 종수를 확인해 주세요.';
24        this.totalKbcSaleCmdtSapr = 0; // 교보문고 배송비 무료 최소 주문 금액 (DGV 제외) > 교보문고 무료 배송 프로그레스바 및 얼럿 노출을 위해 사용됨
25        this._freeDlvrStnrAmnt = 15000; // 교보문고 배송비 대상 금액 (내부 저장용 필드)
26        this.totalHtrsSaleCmdtSapr = 0; // 핫트랙스 배송비 무료 최소 주문 금액 > > 핫트랙스 무료 배송 프로그레스바 및 얼럿 노출을 위해 사용됨
27        this._freeHtrsDlvrStnrAmnt = 20000; // 핫트랙스 배송비 대상 금액 (내부 저장용 필드)
28        this.deliveryFee = 0;//배송비
29        this.divideFee = 0;  //분철비용
30        this._basicDivideFee = 1500; // 교보문고 분철금액 ( 내부 계산용 )
31        this.cartWishList = [];  // 함께 많이 담은 상품 목록
32        this.brandViewCnt = [];
33        this.prenSaleCdtnCodes = ['003', '008']; // 예약 상품 판매상태코드
34        this.emnm = ""; //사번
35        this.hottracksMmbrGrd = "";
36        this.frngPssrNum = ""; // 우편번호
37        this.ordrLmttList = "";
38        this.exprPhrsCntt = "";
39        this.cartGoodsList = "";
40        this.kyoboDeliveryCodes = ["KOR", "ENG", "JAP", "PBC"];
41        //배송지 정보
42        this.deliveryData = {
43            dlpnName: "",
44            rcvrName: "",
45            dlvrAdrsDvsnCode: "",
46            dtlAdrs1: "",
47            dtlAdrs2: "",
48            rcvrPrtbTlnm: "",
49            cmnEntMthdCode : "",
50            cmnEntMthdMemo : "",
51            bildgMngmNum : "",
52        };
53        this.cartPicksList = []; // FOR U 회원 상품목록
54        this.cartTodayList = []; // 오늘의 책
55        this.cartTopicList = []; // 새로 나온 책
56        this.cartPbcList = []; // pbc conner
57        this.cartMdPickList = []; // md pick conner
58        this.cartHottrcaksRecommendList = []; // hottrcaks recommend conner
59        this.prdTotalSum = 0; //선택한 상품총금액
60        // 20251203 아래의 필드 사용하는 곳 없음
61        // this.prdKyoboShippingTotalSum = 0; //교보배송 상품총금액
62        // this.prdHottracksShippingTotalSum = 0; //핫트랙스배송 상품총금액
63        // this.kyoboShippingDialog = "N";
64        // this.hottracksShippingDialog = "N";
65    }
66
67    get freeDlvrStnrAmnt() {
68        // 선택된 교보문고 배송 상품이 없는 경우 (금액이 0원) 무료 배송 조건 15,000원으로 설정
69        if (!this.totalKbcSaleCmdtSapr) {
70            this._freeDlvrStnrAmnt = 15000;
71        }
72
73        return this._freeDlvrStnrAmnt;
74    }
75
76    set freeDlvrStnrAmnt(value) {
77        this._freeDlvrStnrAmnt = value;
78    }
79
80    get freeHtrsDlvrStnrAmnt() {
81        return this._freeHtrsDlvrStnrAmnt;
82    }
83
84    set freeHtrsDlvrStnrAmnt(value) {
85        this._freeHtrsDlvrStnrAmnt = value;
86    }
87
88    /**
89     * 현재 장바구니 상태(체크 여부)를 업데이트한다.
90     * @param {Map<string, string>} updateTargetMap Key: spbkId(장바구니ID), Value: chekYsno(장바구니 체크 여부)
91     */
92    updateCheckState(updateTargetMap) {
93        for (let item of this.allList) {
94            // 업체 배송
95            if (!!item.goodsList) {
96                for (let entsItem of item.goodsList) {
97                    if (updateTargetMap.has(entsItem.spbkId)) {
98                        entsItem.chekYsno = updateTargetMap.get(entsItem.spbkId);
99                    }
100                }
101                continue;
102            }
103
104            // 그 외 상품
105            if (updateTargetMap.has(item.spbkId)) {
106                item.chekYsno = updateTargetMap.get(item.spbkId);
107            }
108        }
109    }
110
111    /**
112     * 교보문고 장바구니 상품 무료 배송 조건 충족 여부
113     * @returns {boolean}
114     */
115    checkKyoboFreeShippingEligibility() {
116        return this.totalKbcSaleCmdtSapr < this.freeDlvrStnrAmnt
117            && this.totalKbcSaleCmdtSapr > 0;
118    }
119
120    /**
121     * 핫트랙스 장바구기 상품 무료 배송 조건 충족 여부
122     * @returns {boolean}
123     */
124    checkHottracksFreeShippingEligibility() {
125        return this.totalHtrsSaleCmdtSapr < this.freeHtrsDlvrStnrAmnt
126            && this.totalHtrsSaleCmdtSapr > 0;
127    }
128
129    setFreeShippingAlertElements(title) {
130        const isKyoboFreeShippingEligibility = this.checkKyoboFreeShippingEligibility();
131        const isHottracksFreeShippingEligibility = this.checkHottracksFreeShippingEligibility();
132        const isBothFreeShippingEligibility = isKyoboFreeShippingEligibility && isHottracksFreeShippingEligibility;
133        // 교보문고 배송 안내 팝업
134        $("#free-delivery-alert-title").html(title);
135
136        // 담당 도메인
137        const mall = isBothFreeShippingEligibility ? "교보문고/핫트랙스" : isKyoboFreeShippingEligibility ? "교보문고" : "핫트랙스";
138        $(".js-free-shipping-alert-mall").html(mall);
139
140        // 컨텐츠 바디
141        const bodyClass = isBothFreeShippingEligibility ? "double" : isHottracksFreeShippingEligibility ? "hottracks" : "";
142        if (bodyClass) {
143            $("#free-delivery-alert-body").addClass(bodyClass);
144        } else {
145            $("#free-delivery-alert-body").removeClass("hottracks").removeClass("double");
146        }
147
148        // 컨텐츠 노출 설정
149        if (isBothFreeShippingEligibility) {
150            $("#free-delivery-alert-kyobo-contents").hide();
151            $("#free-delivery-alert-hottracks-contents").hide();
152            $("#free-shipping-alert-progress-bar").hide();
153            $("#free-delivery-alert-both-contents").show();
154        } else {
155            $("#free-delivery-alert-both-contents").hide();
156            if (isKyoboFreeShippingEligibility) {
157                $("#free-delivery-alert-kyobo-contents").show();
158                $("#free-delivery-alert-hottracks-contents").hide();
159            } else {
160                $("#free-delivery-alert-kyobo-contents").hide();
161                $("#free-delivery-alert-hottracks-contents").show();
162            }
163            $("#free-shipping-alert-progress-bar").show();
164        }
165
166        const infoText = isBothFreeShippingEligibility ? "해외배송 및 업체배송 상품 제외" :
167            isKyoboFreeShippingEligibility
168                ? `*<span class="mall">${mall}</span>배송 상품 기준 (해외주문도서 제외)`
169                : `*<span class="mall">${mall}</span>배송 상품 기준 (업체배송 제외)`;
170        $("#free-shipping-alert-progress-info").html(infoText);
171
172        // 특가 상품 버튼 value 설정
173        $('[data-cart-shipping-event]').val(isBothFreeShippingEligibility ? "242049" : isKyoboFreeShippingEligibility ? "239030" : "238136");
174    }
175}
176
177// 싱글턴 인스턴스
178export const cartState = new CartState();

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.