1<!DOCTYPE html> 2<html lang="th" class=""> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5<meta name="viewport" content="width=980"> 6<title>à¸à¸°à¸à¸£à¹à¸²à¸ªà¸´à¸à¸à¹à¸² - ระà¸à¸à¹à¸à¸£à¸¨à¸±à¸à¸à¹ IP, IP PBX à¸à¸¸à¸à¸à¸£à¸à¹ VoIP ราà¸à¸²à¸à¸£à¸°à¸«à¸¢à¸±à¸ สำหรัภSME | EcocomShop : Inspired by LnwShop.com (v2)</title> 7<link rel="canonical" href="https://www.ecocomshop.net/checkout" /> 8<meta http-equiv="content-language" content="th" /> 9<meta name="description" content="EcocomShop à¸à¸³à¸«à¸à¹à¸²à¸¢à¸à¸¸à¸à¸à¸£à¸à¹à¸£à¸°à¸à¸à¹à¸à¸£à¸¨à¸±à¸à¸à¹ IP ราà¸à¸²à¸à¸£à¸°à¸«à¸¢à¸±à¸ à¸à¸à¸à¹à¸à¸à¹à¸¥à¸°à¸à¸´à¸à¸à¸±à¹à¸ VoIP Solution สำหรัà¸à¸à¸¸à¸£à¸à¸´à¸ SME à¸à¸£à¸à¸à¸à¹à¸à¸à¸µà¹à¹à¸à¸µà¸¢à¸§" /> 10<meta name="keywords" content="ระà¸à¸à¹à¸à¸£à¸¨à¸±à¸à¸à¹ IP, IP-PBX ราà¸à¸², à¸à¸´à¸à¸à¸±à¹à¸à¸£à¸°à¸à¸ Call Center, VoIP Gateway, à¸à¸¹à¹à¸ªà¸²à¸à¸²à¹à¸à¸£à¸¨à¸±à¸à¸à¹ SME, หูà¸à¸±à¸ Call Center, à¹à¸à¸¥à¸µà¹à¸¢à¸ Analog à¹à¸à¹à¸ IP, ระà¸à¸à¸à¸±à¸à¸à¸¶à¸à¹à¸ªà¸µà¸¢à¸à¹à¸à¸£à¸¨à¸±à¸à¸à¹, วิà¸à¸µà¸¥à¸à¸à¹à¸²à¹à¸à¸£à¸¨à¸±à¸à¸à¹à¹à¸à¸à¸à¸à¹à¸à¸£, à¸à¸¸à¸à¸à¸£à¸à¹ VoIP ยีà¹à¸«à¹à¸à¹à¸«à¸à¸à¸µ, à¸à¸±à¸§à¹à¸à¸à¸à¸³à¸«à¸à¹à¸²à¸¢ Dinstar Thailand" /> 11<meta property="thumbnail" content="https://inwfile.com/s-cf/nsr3eg.png" /> 12<meta property="og:title" content="à¸à¸°à¸à¸£à¹à¸²à¸ªà¸´à¸à¸à¹à¸²" /> 13<meta property="og:description" content="EcocomShop à¸à¸³à¸«à¸à¹à¸²à¸¢à¸à¸¸à¸à¸à¸£à¸à¹à¸£à¸°à¸à¸à¹à¸à¸£à¸¨à¸±à¸à¸à¹ IP ราà¸à¸²à¸à¸£à¸°à¸«à¸¢à¸±à¸ à¸à¸à¸à¹à¸à¸à¹à¸¥à¸°à¸à¸´à¸à¸à¸±à¹à¸ VoIP Solution สำหรัà¸à¸à¸¸à¸£à¸à¸´à¸ SME à¸à¸£à¸à¸à¸à¹à¸à¸à¸µà¹à¹à¸à¸µà¸¢à¸§" /> 14<meta property="og:image" content="https://inwfile.com/s-cf/nsr3eg.png" /> 15<meta property="og:type" content="website" /> 16<meta property="og:url" content="https://www.ecocomshop.net/checkout" /> 17<meta name="google-site-verification" content="jryIhDbNNvAS6GVcbGq7RoyWWFAzr9vr8ssV_nzdjtU" /> 18<meta name="google-site-verification" content="5dHMrfyD4bXOwgl7P2gXXE9nGbtlLEw1ylI_mTpuLPg" /> 19<meta name="google-site-verification" content="XFbQY0HuzalM2YiTz4R0XUnOXA0RAHEmeju9jVrnGg8" /> 20<meta name="google-site-verification" content="jryIhDbNNvAS6GVcbGq7RoyWWFAzr9vr8ssV_nzdjtU" /> 21<link rel="alternate" hreflang="th" href="https://www.ecocomshop.net/checkout" /> 22<link rel="image_src" href="https://cf.lnwfile.com/_/cf/_raw/ns/r3/eg.png" /> 23<link rel="shortcut icon" href="https://cf.lnwfile.com/_/cf/_raw/ns/r3/eg.png" /> 24<link rel="apple-touch-icon" href="https://cf.lnwfile.com/_/cf/_raw/ns/r3/eg.png"> 25<link rel="icon" href="https://cf.lnwfile.com/_/cf/_raw/ns/r3/eg.png" /> 26<link rel="stylesheet" type="text/css" id="lnw-basic-css-file" href="https://www.ecocomshop.net/system/application/templates/lnwshop/default/_css/basic.min.css?t=20260810000053" /> 27<link rel="stylesheet" type="text/css" href="https://www.ecocomshop.net/cache/lnwshop/142/079/css/20260416171907/style.css" /> 28<link rel="preload" type="text/css" href="https://www.ecocomshop.net/system/application/modules/lnwbar/_css/color_style.min.css?t=20260901144946" as="style" onload="this.onload=null;this.rel='stylesheet'" /> 29<link rel="preload" type="text/css" href="https://www.ecocomshop.net/system/application/modules/lnwbar/_css/lnw_icon.min.css?t=20220616" as="style" onload="this.onload=null;this.rel='stylesheet'" />
30<script type="text/javascript"> 31 window._lckd = window._lckd || []; 32 function _lck(){window._lckd.push(arguments);} 33 _lck('config',{"policy_url":null,"web_domain":"www.ecocomshop.net","web_avatar":"https:\/\/cf.lnwfile.com\/_\/cf\/_resize\/100\/100\/ns\/r3\/eg.png","web_ukey":"142079","cpath":"\/","customize":{"default_consents":{"functionality_storage":1,"analytics_storage":1,"ad_storage":1}},"html":[]}); 34</script>
vendor: 1 bytes, line 34
34
35<script async defer src="https://www.lnwshop.com/system/application/modules/lnwshopweb/_js/cookie_policy.js?t=20260925"></script>
35 36<meta name="robots" content="noindex"> 37<link rel="preconnect" href="https://cf-up.lnwfile.com"></head> 38<body> 39<!-- ruvIllA-Ga49DOBy13SAL78KNQ27NCA008eBn2NCAfcrx17RC-qzB6_WnY8EBSU- --> 40<!-- jaa31w_s8yvNkudKy0OVUCFZd5jJv1mBRKzMonu16lGzivDfQewTCKSpL7yR3Yt2F_UdPA== --> 41<!-- JHFscExUFm-MS69r05IjQ67LvffkHh5gdwbG2RKgGikv_rsj2prYe6NYhowD3iXOz3rJ9A== --> 42 43<!-- f1sQsInUTKnGT6SV4d2PWWpdlAgaJ2qdJKk20wbMoIDYO7uOZNsI44smtEzpJ56v - 0.2138 --> 44 45<div id="lnwbar-app"></div>
46<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/external/jquery/jquery-1.12.4.min.js"></script>
46 47<div id="ggHead"> 48</div> 49 50<div id="gadget-1" config_id="1" class="widgetPage" data-scene="checkout" data-svars="{"section_sub":"cart","section_args":[]}"><div class="pageWrapper rb-hot-000 rb-new-000 rb-recommend-000 rb-sale-006 pageShirt"> 51 52 53 54 55<div class="pageUnderwear page-checkout"> 56<div id="gadget-4" config_id="4" class="widgetZone z-article"><div class="zoneShirt"> 57<div id="gadget-55" config_id="55" class="widgetUnit u-section u-section-checkout u-section-checkout-cart"><a name="lnwcontent"></a><div class="unitHat"></div><div class="unitShirt"> <div id="lnw_cartArea" class="checkoutBody"> 58 <div class="cart_loader" :style="{display:(cart_loader?'block':'none')}"></div> 59 <div class="shopHeader"> 60<div class="avatar"><a href="https://www.ecocomshop.net/"><img src="https://cf.lnwfile.com/_/cf/_resize/100/100/ns/r3/eg.png"></a></div> 61<div class="name"> 62<a href="https://www.ecocomshop.net/">EcocomShop</a> 63<div class="desc">SHOP ID: 142079 <span class="status" status="">(รà¹à¸²à¸à¹à¸à¸´à¸à¸à¸à¸à¸´)</span></div> 64</div> 65 66<div class="order_step order_step1"><div class="buystep step1 currentStep"><div class="point"></div><div class="line before"></div><div class="line after"></div><div class="text">à¸à¸°à¸à¸£à¹à¸²à¸ªà¸´à¸à¸à¹à¸²</div></div><div class="buystep step2"><div class="point"></div><div class="line before"></div><div class="line after"></div><div class="text">à¸à¸µà¹à¸à¸¢à¸¹à¹à¹à¸à¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸</div></div><div class="buystep step3"><div class="point"></div><div class="line before"></div><div class="line after"></div><div class="text">à¸à¸£à¸§à¸à¸ªà¸à¸à¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸</div></div><div class="buystep step4"><div class="point"></div><div class="line before"></div><div class="line after"></div><div class="text">สัà¹à¸à¸à¸·à¹à¸à¹à¸£à¸µà¸¢à¸à¸£à¹à¸à¸¢ (รà¸à¸à¸³à¸£à¸°à¹à¸à¸´à¸)</div></div></div> 67</div> <div class="checkoutHeader"> 68 <div class="checkoutBack"> 69 <a class="cartBack" href="javascript:history.back()"><i 70 class="icon"></i><span class="text">à¸à¸¥à¸±à¸à¹à¸à¸«à¸à¹à¸²à¸à¸µà¹à¹à¸¥à¹à¸§</span></a> </div> 71 <h1>รายà¸à¸²à¸£à¸ªà¸´à¸à¸à¹à¸²à¹à¸à¸à¸°à¸à¸£à¹à¸²</h1> 72 </div> 73 <div class="defaultMessage"> 74 à¸à¸£à¸¸à¸à¸²à¸à¸£à¸§à¸à¸ªà¸à¸à¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¸´à¸à¸à¹à¸²à¹à¸¥à¸°à¹à¸¥à¸·à¸à¸à¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸ à¸à¸²à¸à¸à¸±à¹à¸à¸à¸¥à¸´à¸à¸à¸¸à¹à¸¡ â<b>สัà¹à¸à¸à¸·à¹à¸à¸ªà¸´à¸à¸à¹à¸²</b>â à¹à¸à¸·à¹à¸à¹à¸à¸à¸±à¹à¸à¸à¸à¸à¸à¸±à¸à¹à¸ </div> 75 <div v-if="cart" class="cartBody" style="visibility: hidden;" :style="{visibility:(cart?'visibility':'hidden')}"> 76 <div class="cartZone"> 77 <div class="headArea"> 78 <div class="detail">สิà¸à¸à¹à¸²</div> 79 <div class="price">ราà¸à¸²/à¸à¸´à¹à¸</div> 80 <div class="quantity">à¸à¸³à¸à¸§à¸</div> 81 <div class="amount">ราà¸à¸²à¸£à¸§à¸¡</div> 82 </div> 83 <div class="productArea"> 84 <product-item v-for="item in cart.items" :key="item.iid" :item="item"></product-item> 85 </div> 86 <div class="productSummaryArea"> 87 <div class="title">สรุà¸à¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¸´à¸à¸à¹à¸²</div> 88 <div class="detail"><span>{{ cart.num }} รายà¸à¸²à¸£</span> 89 <span>{{ cart.quantity }} à¸à¸´à¹à¸</span> <span 90 v-if="checkweight"> à¸à¹à¸³à¸«à¸à¸±à¸à¸£à¸§à¸¡ {{ cart.weight }} à¸à¸£à¸±à¸¡</span> 91 </div> 92 <div class="text">ราà¸à¸²à¸ªà¸´à¸à¸à¹à¸²à¸à¸±à¹à¸à¸«à¸¡à¸</div> 93 <div class="amount" :realpricex="cart.price.product"> 94 <div class="real"><span 95 class="num">{{ amount_format(cart.price.product) }}</span> à¸à¸²à¸ </div> 96 <div class="estimate"></div> 97 </div> 98 </div> 99 <div class="hasDiscountArea salePromotion" v-if="cart.discounts"> 100 <div v-for="(discount, index) in cart.discounts" class="discountArea"> 101 <div class="title"> 102 <div v-if="index==0">สรุà¸à¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¹à¸§à¸à¸¥à¸</div> 103 </div> 104 <div class="detail">สà¹à¸§à¸à¸¥à¸à¸à¸²à¸ {{ 105 show_lang('CART-DISCOUNT-TYPE-'+discount.type.toUpperCase()) }} {{discount.name}} 106 </div> 107 <div class="text">à¸à¸´à¸à¹à¸à¹à¸à¸ªà¹à¸§à¸à¸¥à¸</div> 108 <div class="amount" :realpricex="discount.price"> 109 <div class="real"><span 110 class="num">- {{ amount_format(discount.price) }}</span> à¸à¸²à¸ </div> 111 <div class="estimate"></div> 112 </div> 113 </div> 114 <div class="beforeshippingArea"> 115 <div class="text">ราà¸à¸²à¸«à¸¥à¸±à¸à¸«à¸±à¸à¸ªà¹à¸§à¸à¸¥à¸</div> 116 <div class="amount" :realpricex="cart.price.product - cart.price.discount"> 117 <div class="real"><span class="num">{{ amount_format(cart.price.product - cart.price.discount)}}</span> à¸à¸²à¸ </div> 118 <div class="estimate"></div> 119 </div> 120 </div> 121 </div> 122 <div v-if="!cart.is_no_shipping" class="deliveryArea"> 123 <div class="text"> 124 <b>ระยะà¹à¸§à¸¥à¸²à¸à¸±à¸à¹à¸à¸£à¸µà¸¢à¸¡à¸ªà¸´à¸à¸à¹à¸²</b> 125 {{cart_prepare_day}} วัภหลัà¸à¸à¸£à¸§à¸à¸ªà¸à¸à¸¢à¸à¸à¹à¸à¸´à¸à¹à¸£à¸µà¸¢à¸à¸£à¹à¸à¸¢à¹à¸¥à¹à¸§ à¹à¸¥à¸°à¹à¸¡à¹à¸à¸±à¸à¸£à¸§à¸¡à¸£à¸°à¸¢à¸°à¹à¸§à¸¥à¸²à¸à¸±à¸à¸ªà¹à¸ </div> 126 </div> 127 <template v-if="!cart.is_no_shipping"> 128 <div v-if="cart.is_product_no_shipping_type" class="shiptypeArea"> 129 <div class="shiptypeChoice"> 130 <div class="shiptype no_set"> 131 <div class="detail">à¸à¸±à¸à¸ªà¹à¸à¹à¸¢à¸à¸à¸±à¸ªà¸à¸¸</div> 132 <div class="text">à¸à¹à¸²à¸à¸±à¸à¸ªà¹à¸</div> 133 <div class="price" :realpricex="cart.price.shipping"> 134 <div class="real">+ <span class="num">{{ amount_format(cart.price.shipping) }}</span> à¸à¸²à¸</div> 135 <div class="estimate"></div> 136 </div> 137 </div> 138 </div> 139 </div> 140 <div v-else class="shiptypeArea" 141 :class="{chosen: (show_only_shiptype_chosen && (shipping_type_list.length > 1))}"> 142 <div class="checkoutHeader"> 143 <h2>à¹à¸¥à¸·à¸à¸à¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸à¸ªà¸´à¸à¸à¹à¸²</h2> 144 </div> 145 <div class="shiptypeChoice"> 146 <label v-for="stype in shipping_type_list" :key="stype.id" class="shiptype" 147 :class="{checked:(cart.shipping_type_id==stype.id)}"> 148 <div class="detail"><input type="radio" name="shipping_type" 149 :value="stype.id" 150 v-model="choose_shipping_type_id"/> {{ stype.name?stype.name:type_txt[stype.type] }} 151 <div class="sub_detail"> 152 <div class="shipping_custom" v-if="stype.description">{{stype.description}}</div> 153 <div class="shipping_delivery" v-if="stype.delivery_area">{{stype.delivery_area}}</div> 154 <div v-if="stype.period" 155 class="receive_time"> {{ 156 stype.period }} 157 </div> 158 <div class="shipping_company" 159 v-if="stype.provider && stype.provider.length > 0"> 160 <sp
160an 161 v-for="provider in stype.provider"><span 162 :class="provider"></span></span> 163 <span class="info" v-if="stype.provider.length>1" 164 @mouseover="shiptype_over(stype)" 165 @mouseleave="shiptype_leave(stype)">?</span> 166 <div class="description" v-if="stype.provider.length>1" 167 :style="{display:(stype_info_hover==stype.id?'block':'none')}"> 168 à¸à¸²à¸à¸£à¹à¸²à¸à¸à¸°à¹à¸¥à¸·à¸à¸à¸à¹à¸à¸à¸à¸²à¸à¸à¸µà¹à¹à¸«à¸¡à¸²à¸°à¸ªà¸¡à¸à¸µà¹à¸ªà¸¸à¸ 169 </div> 170 </div> 171 <div v-if="stype.cod_flag" class="shipping_tag tag_cod">à¸à¸³à¸£à¸°à¹à¸à¸´à¸à¸à¸¥à¸²à¸¢à¸à¸²à¸ (COD)</div> 172 </div> 173 </div> 174 <div class="text">à¸à¹à¸²à¸à¸±à¸à¸ªà¹à¸</div> 175 <div v-if="stype.price===false" class="price" realpricex=""> 176 <div class="real">+ <span class="num">x</span> à¸à¸²à¸</div> 177 <div class="estimate"></div> 178 </div> 179 <div v-else class="price" :realpricex="stype.price"> 180 <div class="full" v-if="stype.full_price" 181 style="text-decoration:line-through;color: #aaa;">+ <span class="num">{{ amount_format(stype.full_price) }}</span> à¸à¸²à¸ </div> 182 <div class="real minor" v-if="stype.format=='custom'">-</div> 183 <div class="real" v-else>+ <span 184 class="num">{{ amount_format(stype.price) }}</span> à¸à¸²à¸ </div> 185 <div class="estimate"></div> 186 </div> 187 </label> 188 <div class="change-shiptypeChoice" v-show="show_only_shiptype_chosen" 189 @click="show_only_shiptype_chosen=0">à¹à¸à¸¥à¸µà¹à¸¢à¸à¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸</div> 190 </div> 191 <div v-if="(shipping_type_list.length==0) && (cart.shipping_types_rank.length==0)" class="noshipping_text">รà¹à¸²à¸à¸à¹à¸²à¸à¸µà¹à¸¢à¸±à¸à¹à¸¡à¹à¹à¸à¹à¸à¸³à¸«à¸à¸à¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸à¸ªà¸´à¸à¸à¹à¸² à¸à¸³à¹à¸«à¹à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸³à¹à¸à¸´à¸à¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¹à¸à¹ à¸à¸£à¸¸à¸à¸² <a href="https://www.ecocomshop.net/contactus">à¸à¸´à¸à¸à¹à¸à¸à¸±à¸à¸à¸²à¸à¸£à¹à¸²à¸</a></div> 192 <div v-else-if="(shipping_type_list.length==0)" class="noshipping_text">à¹à¸¡à¹à¸¡à¸µà¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸à¸ªà¸´à¸à¸à¹à¸²à¸à¸µà¹à¸à¸£à¸à¸à¸²à¸¡à¹à¸à¸·à¹à¸à¸à¹à¸ à¸à¸³à¹à¸«à¹à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸³à¹à¸à¸´à¸à¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¹à¸à¹ à¸à¸£à¸¸à¸à¸² <a href="https://www.ecocomshop.net/contactus">à¸à¸´à¸à¸à¹à¸à¸à¸±à¸à¸à¸²à¸à¸£à¹à¸²à¸</a></div> 193 </div> 194 </template> 195 <div class="detailArea"> 196 <div class="title"> 197 <div class="text">à¹à¸à¸´à¹à¸¡à¹à¸à¸´à¸¡à¸à¸¶à¸à¸£à¹à¸²à¸à¸à¹à¸²</div> 198 <div class="optional">(à¹à¸§à¹à¸à¸§à¹à¸²à¸à¹à¸à¹)</div> 199 </div> 200 <div class="body"><textarea class="input" name="detail" v-model="cart.detail" 201 @change="save_detail"></textarea></div> 202 </div> 203 <div class="netArea"> 204 <div class="text">รวมราà¸à¸²à¸à¸±à¹à¸à¸«à¸¡à¸</div> 205 <div class="amount" :realpricex="cart.shipping_type_id?cart.price.pay:'-'"> 206 <div class="real"><span v-if="cart.is_no_shipping || cart.is_product_no_shipping_type || cart.shipping_type_id" class="num">{{ amount_format(cart.price.pay) }}</span><span v-else class="name"><span class="shipping_type_0">*à¸à¸£à¸¸à¸à¸²à¹à¸¥à¸·à¸à¸à¸§à¸´à¸à¸µà¸à¸±à¸à¸ªà¹à¸</span></span> à¸à¸²à¸</div> 207 <div class="estimate"></div> 208 </div> 209 </div> 210 </div> 211 <div id="checkoutNextBar" class="cartButtons"> 212 <div class="alignLeft"> 213 <a class="cartBack" href="https://www.ecocomshop.net/category"><i 214 class="icon"></i><span class="text">à¹à¸¥à¸·à¸à¸à¸ªà¸´à¸à¸à¹à¸²à¹à¸à¸´à¹à¸¡</span></a> </div> 215 <div class="alignRight"> 216 <ul class="b-checkout LBUTTON" btype="button" @click="checkout"> 217 <li class="buttonLeft"></li> 218 <li class="buttonCenter buttonText">สัà¹à¸à¸à¸·à¹à¸à¸ªà¸´à¸à¸à¹à¸²</li> 219 <li class="buttonRight"></li> 220 </ul> 221 </div> 222 </div> 223 </div> 224 </div> 225
225<script type="text/javascript"> 226 var $cartZone; 227 var price_decimal = 2; 228 229 function amount_format(num) { 230 return number_format(num, price_decimal); 231 } 232 233 function lnw_number_format(num) { 234 var floor_num = Math.floor(num); 235 if ((num - floor_num) > 0) { 236 return number_format(num, 2); 237 } 238 return number_format(num, 0); 239 } 240 241 function error_message(err) { 242 if (err.key) { 243 switch (err.key) { 244 case 'NOPRODUCT': 245 case 'HIDDEN': 246 case 'NOSELL': 247 return 'à¹à¸¡à¹à¸¡à¸µà¸ªà¸´à¸à¸à¹à¸²à¸à¸à¸´à¸à¸à¸µà¹ หรืà¸à¸ªà¸´à¸à¸à¹à¸²à¸à¸à¸´à¸à¸à¸µà¹à¹à¸¡à¹à¸à¸²à¸¢'; 248 case 'NOSTOCK': 249 var html = 'สิà¸à¸à¹à¸²à¸à¸µà¹à¹à¸«à¸¥à¸·à¸à¹à¸à¸µà¸¢à¸ %d à¸à¸´à¹à¸ à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¹à¸à¹'; 250 return html.replace(/%d/, err.remain); 251 case 'BUY-WEB_CORRUPTION': 252 return 'à¸à¸à¸à¸ ัย à¸à¸à¸°à¸à¸µà¹à¸£à¸°à¸à¸à¹à¸à¸à¸£à¸°à¸à¸±à¸ à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¸ªà¸´à¸à¸à¹à¸²à¹à¸à¹'; 253 case 'INVALID_POINT': 254 return 'à¸à¸£à¸¸à¸à¸²à¸à¸£à¸à¸à¸à¸±à¸§à¹à¸¥à¸à¹à¸à¸·à¹à¸à¹à¸à¹à¸à¸°à¹à¸à¸à¸ªà¸°à¸ªà¸¡ LnwPoints'; 255 case 'USE>POINT': 256 return 'à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¹à¸à¹à¸à¸°à¹à¸à¸à¸ªà¸°à¸ªà¸¡ LnwPoints à¹à¸à¸´à¸à¸à¸§à¹à¸²à¸à¸°à¹à¸à¸à¸à¸µà¹à¸à¸¸à¸à¸¡à¸µà¹à¸à¹'; 257 case 'POINT>NET': 258 return 'à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¹à¸à¹à¸à¸°à¹à¸à¸à¸ªà¸°à¸ªà¸¡ LnwPoints มาà¸à¸à¸§à¹à¸²à¸£à¸²à¸à¸²à¸£à¸§à¸¡à¸ªà¸´à¸à¸à¹à¸²à¹à¸à¹'; 259 case 'BUY-LNWPAY_ANTI-MONEY_LAUNDERING': 260 return 'ระà¸à¸à¹à¸¡à¹à¸à¸à¸¸à¸à¸²à¸à¸´à¹à¸«à¹à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¸ªà¸´à¸à¸à¹à¸²à¸£à¸²à¸à¸²à¸£à¸§à¸¡à¹à¸à¸´à¸ 30,000 à¸à¸²à¸à¸à¹à¸à¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¹à¸à¹'; 261 case 'PERMISSION_DENIED': 262 return 'à¸à¸¸à¸à¹à¸¡à¹à¸¡à¸µà¸ªà¸´à¸à¸à¸´à¹à¸à¹à¸à¸²à¸à¸à¸¹à¸à¸à¸à¸à¸µà¹'; 263 case 'BELOW_QUANTITY': 264 return __lnw__.show_lang('CART-PRODUCT-BELOW_QUANTITY', err.limit, err.unit); 265 case 'OVER_QUANTITY': 266 return __lnw__.show_lang('CART-PRODUCT-OVER_QUANTITY', err.limit, err.unit); 267 case 'ACCOUNT_LIMIT_REQUIRED_LOGIN': 268 return __lnw__.show_lang('CART-PRODUCT-ACCOUNT_LIMIT_REQUIRED_LOGIN'); 269 case 'OVER_QUANTITY_ACCOUNT_ORDERED': 270 return __lnw__.show_lang('CART-PRODUCT-OVER_QUANTITY_ACCOUNT_ORDERED', err.limit, err.unit, err.ordered, err.unit); 271 case 'OVER_QUANTITY_ACCOUNT': 272 return __lnw__.show_lang('CART-PRODUCT-OVER_QUANTITY_ACCOUNT', err.limit, err.unit); 273 case 'OVER_QUANTITY_DAILY_ACCOUNT_ORDERED': 274 return __lnw__.show_lang('CART-PRODUCT-OVER_QUANTITY_DAILY_ACCOUNT_ORDERED', err.limit, err.unit, err.ordered, err.unit); 275 case 'OVER_QUANTITY_DAILY_ACCOUNT': 276 return __lnw__.show_lang('CART-PRODUCT-OVER_QUANTITY_DAILY_ACCOUNT', err.limit, err.unit); 277 default: 278 var xxx = __lnw__.show_lang(err.key); 279 return xxx; 280 } 281 } 282 return 'มีà¸à¹à¸à¸à¸´à¸à¸à¸¥à¸²à¸à¹à¸à¸´à¸à¸à¸¶à¹à¸'; 283 } 284 285 var cartvm = null; 286 var cart_components = {}; 287 cart_components['product-item'] = { 288 props: ['item'], 289 data: function() { 290 return { 291 new_quantity: null, 292 new_detail: null, 293 edit_detail: 0, 294 wait_save_quantity: false 295 } 296 }, 297 watch: { 298 cart_loader: function(newValue, oldValue) { 299 if(this.wait_save_quantity) { 300 this.save_quantity(); 301 } 302 }, 303 'item.quantity': function(newValue, oldValue) { 304 if(newValue == this.new_quantity) { 305 this.new_quantity = null; 306 } else { 307 this.save_quantity(); 308 } 309 }, 310 'item.detail': function(newValue, oldValue) { 311 if(newValue == this.new_detail) { 312 this.new_detail = null; 313 } else { 314 this.save_detail(); 315 } 316 } 317 }, 318 computed: { 319 cart: function() { 320 return this.$store.state.cart; 321 }, 322 quantity_value: { 323 get: function() { 324 if(this.new_quantity !== null) { 325 return this.new_quantity; 326 } 327 return this.item.quantity 328 }, 329 set: function(newValue) { 330 if(this.item.quantity == newValue) { 331 this.new_quantity = null; 332 } else { 333 this.new_quantity = newValue; 334 this.save_quantity(); 335 } 336 } 337 } 338 }, 339 methods: { 340 quantity_inc: function () { 341 this.quantity_value = this.quantity_value+1; 342 }, 343 quantity_dec: function () { 344 if(this.quantity_value <= 1) { 345 } else { 346 this.quantity_value = this.quantity_value - 1; 347 } 348 }, 349 save_quantity: function() { 350 var that = this; 351 if(this.wait_save_quantity) { 352 clearTimeout(this.wait_save_quantity); 353 } 354 this.wait_save_quantity = setTimeout(function() { 355 that.save_quantity_action(); 356 },1000); 357 }, 358 save_quantity_action: function () { 359 if(this.new_quantity === null) { 360 return; 361 } 362 var val = parseNumber(this.new_quantity); 363 val = parseNumber(val); 364 if(isNaN(val) || val < 1) { 365 return; 366 } 367 if(this.cart_loader) { 368 this.wait_save_quantity = true; 369 return; 370 } 371 var item = this.item; 372 var ajaxdata = {}; 373 374 ajaxdata.action = 'changeProductQuantity'; 375 ajaxdata.items = [ 376 { 377 iid: item.iid, 378 spec: item.spec, 379 quantity: val 380 } 381 ]; 382 383 var onSuccess = void (0); 384 385 if(item.spec.type == 'product') { 386 // Google Analytics Enhanced Ecommerce (event: add/remove cart | edit number of product item in carts) 387 if (typeof gtag !== "undefined" && typeof GA_send_to
387=== 'string' && GA_send_to.length > 0) { 388 if (typeof item.quantity !== 'undefined') { 389 var diff = val - item.quantity; 390 var event_name = null; 391 if (diff < 0) 392 event_name = 'remove_from_cart'; 393 else 394 event_name = 'add_to_cart'; 395 if (event_name) { 396 var qty = Math.abs(diff); 397 onSuccess = function () { 398 gtag('event', event_name, { 399 'send_to': GA_send_to, 400 "items": [ 401 { 402 "id": item.spec.product_id, 403 "name": item.name, 404 "category": typeof item.category !== 'undefined' ? item.category : null, 405 "quantity": qty, 406 "price": qty * item.unit_price 407 } 408 ] 409 }); 410 } 411 } 412 } 413 } 414 } 415 this.$store.dispatch('save_func', { 416 ajaxdata: ajaxdata, 417 item: item, 418 onSuccess: onSuccess 419 }); 420 }, 421 save_detail: function () { 422 var that = this; 423 var item = this.item; 424 var ajaxdata = {}; 425 426 ajaxdata.action = 'updateProductRemark'; 427 ajaxdata.items = [ 428 { 429 iid: item.iid, 430 spec: item.spec, 431 detail: this.new_detail 432 } 433 ]; 434 this.edit_detail = 0; 435 this.$store.dispatch('save_func', { 436 ajaxdata: ajaxdata 437 }); 438 }, 439 remove_detail: function () { 440 this.new_detail = ''; 441 this.save_detail(); 442 }, 443 start_edit_detail: function () { 444 this.new_detail = this.item.detail; 445 this.edit_detail = 2; 446 }, 447 start_add_detail: function (item) { 448 this.edit_detail = 1; 449 }, 450 remove_item: function () { 451 var that = this; 452 var item = this.item; 453 __lnw__.simpleConfirm('ยืà¸à¸¢à¸±à¸à¸à¸²à¸£à¸¥à¸à¸ªà¸´à¸à¸à¹à¸²à¸à¸µà¹à¸à¸à¸à¸à¸²à¸à¸à¸°à¸à¸£à¹à¸²', 454 function() { 455 var ajaxdata = {}; 456 ajaxdata.action = 'changeProductQuantity'; 457 458 ajaxdata.items = [ 459 { 460 iid: item.iid, 461 spec: item.spec, 462 quantity: 0 463 } 464 ]; 465 466 var onSuccess = void (0); 467 468 if(item.spec.type == 'product') { 469 // Google Analytics Enhanced Ecommerce (event: remove_from_cart) 470 if (typeof gtag !== "undefined" && typeof GA_send_to === 'string' && GA_send_to.length > 0) { 471 onSuccess = function () { 472 gtag('event', 'remove_from_cart', { 473 'send_to': GA_send_to, 474 "items": [ 475 { 476 "id": item.spec.product_id, 477 "name": item.name, 478 "category": typeof item.category !== 'undefined' ? item.category : null, 479 "quantity": item.quantity, 480 "price": item.total_price 481 } 482 ] 483 }); 484 } 485 } 486 } 487 488 that.$store.dispatch('save_func', { 489 ajaxdata: ajaxdata, 490 onSuccess: onSuccess 491 }); 492 } 493 ); 494 }, 495 }, 496 template: `<div class="product"> 497 <div class="image"> 498 <img :src="item.thumbnail"/> 499 </div> 500 <div class="data"> 501 <div class="name" v-if="item.parent_id > 0"><a :href="item.url">{{ 502 item.parent_name }}<br/> ↳ {{ item.sku_name }}</a></div> 503 <div class="name" v-else><a :href="item.url">{{ item.name }}</a></div> 504 <div class="price" :realpricex="item.unit_price"> 505 <div class="mobileBeforeText">ราà¸à¸²à¸à¹à¸à¸à¸´à¹à¸</div> 506 <div class="real"><span 507 class="num">{{ amount_format(item.unit_price) }}</span> à¸à¸²à¸</div> 508 <div class="estimate"></div> 509 </div> 510 <div class="quantity"> 511 <div class="mobileBeforeText">à¸à¸³à¸à¸§à¸</div> 512 <div v-if="cart.lock" class="uneditable"><span class="num" v-text="amount_format(item.quantity)"></span></div> 513 <div v-else class="editable"> 514 <div class="increase" @click="quantity_inc">+</div> 515 <div class="decrease" @click="quantity_dec">-</div> 516 <div class="box"><input type="text" class="input" v-model="quantity_value" /></div> 517 </div> 518 </div> 519 <div class="amount" :realpricex="item.total_price"> 520 <div class="mobileBeforeText">ราà¸à¸²à¸£à¸§à¸¡</div> 521 <div class="real"><span 522 class="num">{{ amount_format(item.total_price) }}</span> à¸à¸²à¸ </div> 523 <div class="estimate"></div> 524 </div> 525 </div> 526 <div class="error"> 527 <div v-for="error in item.errors"> 528 {{ error_message(error) }} 529 </div> 530 </div> 531 <div class="other"> 532 <div v-if="item.promotions && (item.promotions.length > 0)" class="promotion">สิà¸à¸à¹à¸²à¹à¸à¹à¸²à¸£à¹à¸§à¸¡à¹à¸à¸£à¹à¸¡à¸à¸±à¹à¸ {{ 533 item.promotions.join(', ') }} 534 </div> 535 <div v-else-if="item.promotion" class="promotion">สิà¸à¸à¹à¸²à¹à¸à¹à¸²à¸£à¹à¸§à¸¡à¹à¸à¸£à¹à¸¡à¸à¸±à¹à¸ {{ 536 item.promotion.join(', ') }} 537 </div> 538 <div class="note"> 539 <div v-if="edit_detail"> 540 <input type="text" class="pdetail" v-model="new_detail"> 541 <button type="button" class="btn-submit" @click="save_detail">{{ 542 (edit_detail==2)?'à¸à¸£à¸±à¸à¸à¸£à¸¸à¸ ':'à¹à¸à¸´à¹à¸¡'}} 543 </button> 544 <button type="button" class="btn-reset" @click="remove_detail">{{ 545 (edit_detail==2)?'ลภ':'ยà¸à¹à¸¥à¸´à¸'}} 546 </button> 547 </div> 548 <div v-else-if="(new_detail == null) && item.detail"><strong>หมายà¹à¸«à¸à¸¸</strong> <span 549 class="body">{{ item.detail }}</span> <a class="edit" @click="start_edit_detail">✎ à¹à¸à¹à¹à¸</a> 550 </div> 551 <div v-else-if="new_detail"><strong>หมายà¹à¸«à¸à¸¸</strong> <span 552 class="body">{{ new_detail }}</span> <a class="edit" @click="start_edit_detail">✎ à¹à¸à¹à¹à¸</a> 553 </div> 554 <div v-else><a class="add" 555 @click="start_add_detail">à¹à¸à¸´à¹à¸¡à¸«à¸¡à¸²à¸¢à¹à¸«à¸à¸¸</a> 556 </div> 557 </div> 558 <div v-if="!cart.lock" class="control"><a class="remove" 559 @click="remove_item">ลà¸à¸£à¸²à¸¢à¸à¸²à¸£à¸à¸µà¹</a> 560 </div> 561 </div> 562 </div>` 563 } 564 document.addEventListener("DOMContentLoaded", function () { 565 Vue.use(Vuex); 566 cart_store = new Vuex.Store({ 567 state: function() { 568 var ret = { 569 cart: null, 570 shop: null, 571 cart_loader: false, 572 }; 573 return ret; 574 }, 575 getters: { 576 }, 577 mutations: { 578 }, 579 actions: { 580 save_func: function(context, payload) { 581 var state = context.state; 582 if (state.cart_loader) { 583 //return false;
584 } 585 state.cart_loader = true; 586 var xhr = json_post({ 587 method: 'PUT', 588 url: front_url('api/lnwme/cart/cookie')+'?ddd=full', 589 data: payload.ajaxdata, 590 success: function(response) { 591 if(response.error) { 592 var msgs = []; 593 var x_msgs = {}; 594 var error_messages = response.error_messages; 595 if(typeof error_messages == 'string') { 596 error_messages = [{ 597 key: error_messages 598 }] 599 } 600 601 if (typeof payload.item !== 'undefined') { 602 Vue.set(payload.item,'errors', error_messages); 603 } else { 604 var error_txts = []; 605 error_messages.forEach(function(err_msg) { 606 error_txts.push(error_message(err_msg)); 607 }); 608 __lnw__.simpleAlert(error_txts); 609 } 610 } 611 if(response.cart) { 612 Vue.set(state,'cart', response.cart); 613 614 $('.cart_num').html(state.cart.num); 615 $('.cart_price').html(state.cart.price.product).attr('realprice', state.cart.price.product); 616 if (typeof __lnw__ == 'object' && __lnw__.gointer.is_enabled()) { 617 __lnw__.gointer.reload_convert_currency(); 618 } 619 $('.cart_quantity').html(state.cart.quantity); 620 } 621 // Google Analytics Enhanced Ecommerce 622 if (typeof payload.onSuccess == 'function') { 623 try { 624 payload.onSuccess.call(); 625 } catch (e) { 626 } 627 ; 628 } 629 }, 630 error: function(rkey, rdata) { 631 __lnw__.simpleAlert(rkey); 632 console.info(rdata); 633 }, 634 complete: function() { 635 state.cart_loader = false;
636 } 637 }); 638 }, 639 load_init: function(context) { 640 var state = context.state; 641 state.cart_loader = true; 642 var xhr = json_post({ 643 url: front_url('api/lnwme/cart/cookie')+'?ddd=init', 644 data: {}, 645 success: function(response) { 646 if(response.error) { 647 var msgs = []; 648 var x_msgs = {}; 649 var error_messages = response.error_messages; 650 if(typeof error_messages == 'string') { 651 error_messages = [{ 652 key: error_messages 653 }] 654 } 655 656 var error_txts = []; 657 error_messages.forEach(function(err_msg) { 658 error_txts.push(error_message(err_msg)); 659 }); 660 __lnw__.simpleAlert(error_txts); 661 } 662 Vue.set(state,'cart', response.cart); 663 Vue.set(state,'shop', response.shop); 664 win_resize(); 665 }, 666 error: function(rkey, rdata) { 667 __lnw__.simpleAlert(rkey); 668 console.info(rdata); 669 }, 670 complete: function() { 671 state.cart_loader = false;
672 } 673 }); 674 } 675 } 676 }); 677 cartvm = new Vue({ 678 el: '#lnw_cartArea', 679 store: cart_store, 680 components: cart_components, 681 data: function () { 682 return { 683 type_txt: { 684 normal: 'à¸à¸±à¸ªà¸à¸¸à¸à¸£à¸£à¸¡à¸à¸²', 685 register: 'à¸à¸±à¸ªà¸à¸¸à¸¥à¸à¸à¸°à¹à¸à¸µà¸¢à¸', 686 ems: 'à¸à¸±à¸ªà¸à¸¸à¸à¹à¸§à¸à¸à¸´à¹à¸¨à¸©', 687 custom: 'à¸à¸³à¸«à¸à¸à¹à¸à¸' 688 }, shipping_country_selected: 1, 689 show_only_shiptype_chosen: 0, 690 coupon_code_value: '', 691 view_mycoupons: 0, 692 choose_coupon_id: null, 693 choose_shipping_type_id: null, 694 lang_text_time: 0, 695 stype_info_hover: 0 696 } 697 }, 698 watch: { 699 choose_shipping_type_id: function (val) { 700 var ajaxdata = {}; 701 if (typeof this.cart.shipping_types[val] == 'undefined' || !this.shiptype_show(this.cart.shipping_types[val])) { 702 ajaxdata.action = 'cancelShippingMethod'; 703 this.$store.dispatch('save_func', { 704 ajaxdata: ajaxdata 705 }); 706 this.show_only_shiptype_chosen = 0; 707 } else { 708 var onSuccess = void(0); 709 // Google Analytics Enhanced Ecommerce (event: set_checkout_option) 710 if (typeof this.cart.shipping_types[val].name !== 'undefined') { 711 if (typeof gtag !== "undefined" && typeof GA_send_to === 'string' && GA_send_to.length > 0) { 712 var shipping_type_name = this.cart.shipping_types[val].name; 713 714 onSuccess = function () { 715 gtag('event', 'set_checkout_option', { 716 'send_to': GA_send_to, 717 'checkout_step': 1, 718 'checkout_option': 'shipping method', 719 'value': shipping_type_name 720 }); 721 }; 722 } 723 } 724 ajaxdata.action = 'saveShippingMethod'; 725 ajaxdata.shipping_type_id = val; 726 this.$store.dispatch('save_func', { 727 ajaxdata: ajaxdata, 728 onSuccess: onSuccess 729 }); 730 this.show_only_shiptype_chosen = 1; 731 } 732 } 733 }, 734 updated: function () { 735 if (typeof __lnw__ == 'object' && __lnw__.gointer.is_enabled()) { 736 __lnw__.gointer.reload_convert_currency(); 737 } 738 }, 739 computed: { 740 cart_loader: function() { 741 return (this.$store.state.cart_loader); 742 }, 743 cart: function() { 744 return this.$store.state.cart; 745 }, 746 shop: function() { 747 return this.$store.state.shop; 748 }, 749 shipping_type_list: function () { 750 var shipping_types = this.cart.shipping_types; 751 var stype_list = new Array(); 752 var that = this; 753 this.cart.shipping_types_rank.forEach(function (stype_id) { 754 var stype = shipping_types[stype_id]; 755 stype.info_hover = false; 756 if(!stype.is_lnwshop_ignore && that.shiptype_show(stype)) { 757 stype_list.push(stype); 758 } 759 }); 760 return stype_list; 761 }, 762 checkweight: function () { 763 return false;
764 return false; 765 var xxx = false; 766 $.each(this.cart.shipping_types, function (stype_id, stype) { 767 if (stype.format == 'weight') { 768 xxx = true; 769 } 770 }) 771 return xxx; 772 }, 773 cart_prepare_day: function () { 774 var max_prepare_day = 0; 775 this.cart.items.forEach(function(item) { 776 var day = item.prepare_duration; 777 if (day != '') { 778 day = parseInt(day); 779 if (day > max_prepare_day) { 780 max_prepare_day = day; 781 } 782 } 783 }); 784 return max_prepare_day; 785 }, 786gtag_cart_items: function () { 787var payload_items = []; 788this.cart.items.forEach(function(item) { 789if(item.spec.type != 'product') { 790return; 791} 792payload_item = {}; 793payload_item.id = item.spec.product_id; 794payload_item.name = item.name; 795if (typeof item.category !== 'undefined') 796payload_item.category = item.category; 797payload_item.quantity = item.quantity; 798payload_item.price = item.total_price; 799payload_items.push(payload_item); 800}) 801return payload_items; 802}, 803 gtag_cart_coupon: function () { 804 var coupon = ''; 805 806 if (typeof this.cart.coupons === 'object') { 807 for (var i in this.cart.coupons) { 808 if (typeof this.cart.coupons[i].config === 'object') { 809 if (typeof this.cart.coupons[i].config.name !== 'undefined') { 810 if (coupon.length > 0) 811 coupon += ', '; 812 coupon += this.cart.coupons[i].config.name; 813 } 814 } 815 } 816 } 817 818 return coupon; 819 }, 820 my_lnwpoints: function() { 821 var points = 0; 822 if ((typeof lnw_store != 'undefined') && (typeof lnw_store.state.user != 'undefined') && (lnw_store.state.user.point != null)) { 823 points = lnw_store.state.user.point.available_balance; 824 } 825 return points; 826 } 827 }, 828 methods: { 829 update_lang: function () { 830 this.lang_text_time = new Date().getTime(); 831 }, 832 show_lang: function () { 833 var xxx = this.lang_text_time; 834 return __lnw__.show_lang.apply(this, arguments); 835 }, 836 shiptype_show: function (stype) { 837 return (stype.price !== false); 838 }, 839 shiptype_over: function (stype) { 840 this.stype_info_hover = stype.id; 841 }, 842 shiptype_leave: function (stype) { 843 this.stype_info_hover = 0; 844 }, 845 error_message: function (err) { 846 return error_message(err); 847 }, 848 use_coupon_code: function () { 849 var ajaxdata = {}; 850 ajaxdata.action = 'setCouponCode'; 851 ajaxdata.coupon_code = this.coupon_code_value.trim(); 852 if (ajaxdata.coupon_code == '') { 853 return; 854 } 855 856 this.$store.dispatch('save_func', { 857 ajaxdata: ajaxdata, 858 }); 859 }, 860 use_coupon_id: function (id) { 861 var ajaxdata = {}; 862 ajaxdata.action = 'setCouponId'; 863 ajaxdata.coupon_id = id; 864 this.$store.dispatch('save_func', { 865 ajaxdata: ajaxdata, 866 }); 867 this.view_mycoupons = 0; 868 }, 869 cancel_use_coupon: function (coupon_id) { 870 var coupon_code = null; 871 if (typeof this.cart.coupons === 'object'){ 872 var coupon = this.cart.coupons.filter(obj => { 873 return obj.id === coupon_id 874 }); 875 if(coupon.length > 0) { 876 coupon_code = coupon[0].code; 877 }else { 878 return false;
879 } 880 }else if (typeof this.cart.coupons[coupon_id] == 'undefined') { 881 return false; 882 }else{ 883 coupon_code = this.cart.coupons[coupon_id].code; 884 } 885 if (coupon_code) { 886 var ajaxdata = {}; 887 ajaxdata.action = 'removeCouponCode'; 888 ajaxdata.coupon_code = coupon_code; 889 this.$store.dispatch('save_func', { 890 ajaxdata: ajaxdata, 891 }); 892 } else { 893 var ajaxdata = {}; 894 ajaxdata.action = 'removeCouponId'; 895 ajaxdata.coupon_id = coupon_id; 896 this.$store.dispatch('save_func', { 897 ajaxdata: ajaxdata, 898 }); 899 } 900 this.choose_coupon_id = null 901 }, 902 save_detail: function () { 903 var ajaxdata = {}; 904 ajaxdata.action = 'saveOrderMeta'; 905 ajaxdata.detail = this.cart.detail; 906 this.$store.dispatch('save_func', { 907 ajaxdata: ajaxdata 908 }); 909 }, 910 reset_cart: function () { 911 var ajaxdata = {}; 912 ajaxdata.action = 'resetCart'; 913 914 var onSuccess = void (0); 915 916 // Google Analytics Enhanced Ecommerce (event: remove_from_cart) 917 if (typeof gtag !== "undefined" && typeof GA_send_to === 'string' && GA_send_to.length > 0) { 918 var payload_items = this.gtag_cart_items; 919 onSuccess = function () { 920 gtag('event', 'remove_from_cart', { 921 'send_to': GA_send_to, 922 "items": payload_items 923 }); 924 } 925 } 926 927 this.$store.dispatch('save_func', { 928 ajaxdata: ajaxdata, 929 onSuccess: onSuccess 930 }); 931 }, 932 set_lnwpoint: function (point) { 933 var ajaxdata = {}; 934 ajaxdata.action = 'setRedeemLnwPoint'; 935 ajaxdata.lnwpoint = point; 936 this.$store.dispatch('save_func', { 937 ajaxdata: ajaxdata, 938 }); 939 }, 940 use_lnwpoint: function () { 941 var point = this.cart.lnwpoint; 942 if (((typeof lnw_store == 'undefined') || (typeof lnw_store.state.user == 'undefined') || (typeof lnw_store.state.user.point == null))) { 943 __lnw__.simpleAlert('à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸¶à¸à¸à¸°à¹à¸à¸à¸ªà¸°à¸ªà¸¡ LnwPoints à¹à¸à¹'); 944 this.cart.lnwpoint = 0; 945 } else { 946 var my_points = this.my_lnwpoints; 947 if (point > my_points) { 948 __lnw__.simpleAlert('à¸à¸¸à¸à¹à¸à¹à¸à¸°à¹à¸à¸à¸ªà¸°à¸ªà¸¡ LnwPoints มาà¸à¸à¸§à¹à¸²à¸à¸µà¹à¸¡à¸µ'); 949 this.cart.lnwpoint = 0; 950 } else { 951 this.set_lnwpoint(point); 952 } 953 } 954 }, 955 cancel_lnwpoint: function () { 956 this.set_lnwpoint(0); 957 }, 958 checkout: function (event) { 959 var that = this; 960 if(this.cart.is_no_shipping) { 961 962 } else if(this.cart.is_product_no_shipping_type) { 963 964 } else if (typeof this.cart.shipping_types[this.cart.shipping_type_id] == 'undefined' || !this.shiptype_show(this.cart.shipping_types[this.cart.shipping_type_id])) { 965 __lnw__.simpleAlert('à¸à¸£à¸¸à¸à¸²à¹à¸¥à¸·à¸à¸à¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸'); 966 return false;
967 } 968 var ele = $(event.target).closest('b-checkout'); 969 var ajaxdata = {}; 970 $.lnwajax.run('goto_checkout', true, { 971 type: 'POST', 972 url: 'https' + '://' + 'www.ecocomshop.net/checkout/start', 973 data: ajaxdata, 974 dataType: 'json', 975 start: function () { 976 button_wait(ele); 977 }, 978 success: function (response) { 979 lnwajax_response(response, function (rdata) { 980 var delay = 0; 981 if(window.lnwOpenai && rdata.openai_event && window.lnwOpenai.track(rdata.openai_event)) { 982 delay = 1000; 983 } 984 985 if (typeof rdata.fbq_params != 'undefined' && typeof fbq == 'function') { 986 fbq('track', 'InitiateCheckout', rdata.fbq_params); 987 delay = 1000; 988 } 989 990 // Google Analytics Enhanced Ecommerce (event: begin_checkout) 991 if (typeof gtag !== "undefined" && typeof GA_send_to === 'string' && GA_send_to.length > 0) { 992 var payload_gtag = {}; 993 payload_gtag.send_to = GA_send_to; 994 payload_gtag.items = that.gtag_cart_items; 995 996 var coupon = that.gtag_cart_coupon; 997 if (typeof coupon === 'string' && coupon.length > 0) 998 payload_gtag.coupon = coupon; 999 else { 1000 console.log(coupon); 1001 } 1002 1003 payload_gtag.checkout_step = 1; 1004 1005 gtag('event', 'begin_checkout', payload_gtag); 1006 1007 delay = 1000; 1008 } 1009 1010 if (typeof rdata.url != 'undefined') { 1011 setTimeout(function () { 1012 window.location.href = rdata.url; 1013 }, delay); 1014 } 1015 1016 }
1016, function (rkey, rdata) { 1017 button_normal(ele); 1018 switch (rkey) { 1019 case 'BUY-ITEM_SOLDOUT': 1020 __lnw__.simpleAlert('à¸à¸à¸à¸ ัย สิà¸à¸à¹à¸²à¸à¸²à¸à¸à¸¢à¹à¸²à¸à¹à¸à¸à¸°à¸à¸£à¹à¸²à¹à¸«à¸¥à¸·à¸à¹à¸¡à¹à¹à¸à¸µà¸¢à¸à¸à¸'); 1021 //window.location.href='https://www.ecocomshop.net/cart'; 1022 break; 1023 case 'BUY-NO_ITEM': 1024 __lnw__.simpleAlert('à¸à¸à¸à¸ ัย à¸à¸à¸°à¸à¸µà¹à¸¢à¸±à¸à¹à¸¡à¹à¸¡à¸µà¸ªà¸´à¸à¸à¹à¸²à¹à¸à¸à¸°à¸à¸£à¹à¸²'); 1025 break; 1026 case 'BUY-EMPTY_SHIPPINGTYPE': 1027 __lnw__.simpleAlert('à¸à¸£à¸¸à¸à¸²à¹à¸¥à¸·à¸à¸à¸§à¸´à¸à¸µà¸à¸²à¸£à¸à¸±à¸à¸ªà¹à¸'); 1028 break; 1029 case 'BUY-ORDER_LIMIT': 1030 case 'BUY-ORDER_LIMIT_MIN_PRICE': 1031 case 'BUY-ORDER_LIMIT_MAX_PRICE': 1032 case 'BUY-OVER_TOTAL_QUANTITY': 1033 case 'BUY-OVER_ORDER_QUANTITY': 1034 __lnw__.simpleAlert(__lnw__.show_lang(rkey, rdata)); 1035 break; 1036 case 'BUY-MUST_LOGIN': 1037 case 'BUY-USER_NO_MOBILE': 1038 __lnw__.simpleAlert(__lnw__.show_lang(rkey, rdata)); 1039 break; 1040 case 'BUY-LNWPAY_ANTI-MONEY_LAUNDERING': 1041 __lnw__.simpleAlert('ระà¸à¸à¹à¸¡à¹à¸à¸à¸¸à¸à¸²à¸à¸´à¹à¸«à¹à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¸ªà¸´à¸à¸à¹à¸²à¸£à¸²à¸à¸²à¸£à¸§à¸¡à¹à¸à¸´à¸ 30,000 à¸à¸²à¸à¸à¹à¸à¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸à¹à¸à¹'); 1042 break; 1043 default: 1044 __lnw__.simpleAlert('à¸à¸à¸à¸ ัย à¸à¸à¸à¹à¸à¸à¸´à¸à¸à¸¥à¸²à¸à¸à¸²à¸à¸à¸¢à¹à¸²à¸ à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸³à¹à¸à¸´à¸à¸à¸²à¸£à¸à¹à¸à¹à¸à¹'); 1045 break; 1046 } 1047 }); 1048 } 1049 }); 1050 } 1051 }, 1052 mounted: function() { 1053 this.$store.dispatch('load_init'); 1054 } 1055 }); 1056 __lnw__.bind_lang_save(function () { 1057 cartvm.update_lang(); 1058 }); 1059 nextbar_init(); 1060 }); 1061 var win_height, nextbar_hover_flag = 0, topLine, barheight; 1062 1063 function nextbar_scroll_event(ele) { 1064 var scrollTop = $(ele).scrollTop(); 1065 if (scrollTop < topLine) { 1066 if (!nextbar_hover_flag) { 1067 $('.checkoutBody').addClass('showNextBar'); 1068 nextbar_hover_flag = true; 1069 $('.cartZone').css({marginBottom: barheight + 'px'}); 1070 } 1071 } else { 1072 if (nextbar_hover_flag) { 1073 $('.checkoutBody').removeClass('showNextBar'); 1074 nextbar_hover_flag = false; 1075 $('.cartZone').css({marginBottom: 0}); 1076 } 1077 } 1078 } 1079 1080 function win_resize() { 1081 var win_height = $(window).height(); 1082 var bottomOffset; 1083 var $self = $('.cartZone'); 1084 if($self.length > 0) { 1085 var zoneheight = $self.outerHeight(true); 1086 var zonetop = $self.offset().top; 1087 barheight = $('#checkoutNextBar').outerHeight(true); 1088 bottomOffset = zonetop + zoneheight + barheight; 1089 if ($self.closest('#lnwbox2Body').length > 0) { 1090 bottomOffset -= $('#lnwbox2Body').offset().top; 1091 } 1092 topLine = bottomOffset - win_height; 1093 } 1094 } 1095 1096 function nextbar_init() {
1097 var $nextbar_container = $(window); 1098 //$('#checkoutNextBar').after('<div class="cartButtons-clone"></div>'); 1099 win_resize(); 1100 nextbar_scroll_event($nextbar_container); 1101 $nextbar_container.scroll(function () { 1102 nextbar_scroll_event(this); 1103 }); 1104 $(window).resize(function () { 1105 win_resize(); 1106 nextbar_scroll_event($nextbar_container); 1107 }); 1108 } 1109 </script>
1109 1110 <div class="checkoutFooter"> 1111<div class="lnw_footer_area"> 1112</div> 1113<div class="copyright" align="center"> 1114<div class="copyrightText"><span style="padding-left: 10px;">Copyright © 2026</span> 1115<a href="https://www.ecocomshop.net/">www.ecocomshop.net</a> 1116<span>All rights reserved.</span></div> 1117<div class="footerText"><a href="https://www.lnwshop.com/" title="รà¹à¸²à¸à¸à¹à¸²à¸à¸à¸à¹à¸¥à¸à¹" target="_blank" rel="noopener">รà¹à¸²à¸à¸à¹à¸²à¸à¸à¸à¹à¸¥à¸à¹</a> 1118 Inspired by 1119<a href="https://www.lnwshop.com/" title="รà¹à¸²à¸à¸à¹à¸²à¸à¸à¸à¹à¸¥à¸à¹" target="_blank" rel="noopener">LnwShop.com (v2)</a> 1120</div><span id="lnwstat-container-ebi93"></span>
1121<script type="text/javascript"> 1122var _lnws = 'scf.lnwstat.com'; 1123var _lnwp = '142079'; 1124var _lnwd = 'www.ecocomshop.net'; 1125var _lnwm = ''; 1126var _lnwk = ''; 1127 1128(function() { 1129var sc = document.createElement('script'); sc.type = 'text/javascript'; sc.async = true; 1130sc.src = 'https://' + _lnws + '/lnwstat.js'; 1131var sp = document.createElement('span'); sp.id='lnwstat-container-ebi93-inner'; 1132var e = document.getElementById('lnwstat-container-ebi93'); e.appendChild(sc); e.appendChild(sp); 1133 1134})(); 1135</script>
1135 1136</div> 1137</div></div><div class="unitShoe"></div></div></div></div> 1138 1139</div> 1140 1141 1142</div><div id="cart22_container" style="visibility: hidden;" :style="{visibility:'visible'}"> 1143 <div id="cart22_alert" 1144 style="display: none;" 1145 v-show="alert_is_show" 1146 @click="cartShow" 1147 :class="(alert_is_show)?'show_alert':'hide_alert'"> 1148 <span>à¸à¸¸à¸à¸¡à¸µà¸ªà¸´à¸à¸à¹à¸² <span class="cart_quantity" v-text="total_quantity">0</span> à¸à¸´à¹à¸à¹à¸à¸à¸°à¸à¸£à¹à¸² <u>สัà¹à¸à¸à¸·à¹à¸à¸à¸±à¸à¸à¸µ</u></span> 1149 </div> 1150 <div id="cart22_overlay" 1151 style="display: none;" 1152 v-show="cart_is_show && !cart_is_hiding" 1153 @click="cartHide"></div> 1154 <div id="cart22" 1155 :class="{ show_cart : cart_is_show, hide_cart : cart_is_hiding }" 1156 v-if="cart_is_show"> 1157 <div class="cart22_container"> 1158 <div class="cart22_header_container"> 1159 <div v-if="is_loading" class="cart22-progress-linear-container"> 1160 <div class="cart22-progress-linear"> 1161 <div class="cart22-progress-linear__background" :style="{backgroundColor: cc_color}" ></div> 1162 <div class="cart22-progress-linear__indeterminate"> 1163 <div class="cart22-progress-linear__indeterminate long" :style="{backgroundColor: cc_color}" ></div> 1164 <div class="cart22-progress-linear__indeterminate short" :style="{backgroundColor: cc_color}" ></div> 1165 </div> 1166 </div> 1167 </div> 1168 <div class="cart22_header"> 1169 <div>สิà¸à¸à¹à¸²à¹à¸à¸à¸°à¸à¸£à¹à¸² ({{total_num}} รายà¸à¸²à¸£)</div> 1170 <div class="cart22_close" 1171 @click="cartHide()"><img src="https://www.ecocomshop.net/system/application/modules/lnwshop/_images/cart22/close.png"/> 1172 </div> 1173 </div> 1174 </div> 1175 <div class="cart22_content"> 1176 <!--if empty cart--> 1177 <div v-if="items.length <= 0" class="cart22_empty"> 1178 <span v-if="is_initing"><div class="boxload_16"></div></span> 1179 <span v-else>à¸à¸à¸à¸ ัย à¸à¸à¸°à¸à¸µà¹à¸¢à¸±à¸à¹à¸¡à¹à¸¡à¸µà¸ªà¸´à¸à¸à¹à¸²à¹à¸à¸à¸°à¸à¸£à¹à¸²</span> 1180 </div> 1181 <!--end if--> 1182 <!--if NOT empty cart--> 1183 <div v-else class="cart22_itemlist"> 1184 <cart-item v-for="item in items" :key="item.iid" :item="item"></cart-item> 1185 </div> 1186 <!--end if--> 1187 <div v-if="discounts.length > 0" class="cart22_discountlist"> 1188 <div class="cart22_discount_item"> 1189 <div class="cart22_discount_label">ราà¸à¸²à¸ªà¸´à¸à¸à¹à¸²à¸à¸±à¹à¸à¸«à¸¡à¸</div> 1190 <div class="cart22_discount_amount">฿ {{price_format(total_price)}}</div> 1191 </div> 1192 <div v-for="(discount,idx) in discounts" :key="idx" class="cart22_discount_item"> 1193 <div class="cart22_discount_label" v-text="discount.label"></div> 1194 <div class="cart22_discount_amount">- ฿ {{price_format(discount.price)}}</div> 1195 </div> 1196 </div> 1197 </div> 1198 <div class="cart22_tailer"> 1199 <div class="cart22_summary"> 1200 <div class="cart22_summary_label"> 1201 <div>ราà¸à¸²à¸ªà¸´à¸à¸à¹à¸²à¸à¸±à¹à¸à¸«à¸¡à¸</div> 1202 <div class="minor">{{total_quantity}} à¸à¸´à¹à¸</div> 1203 </div> 1204 <div class="cart22_summary_amount"> 1205 <div>฿ {{price_format(after_product_price)}}</div> 1206 <div class="minor">ราà¸à¸²à¹à¸¡à¹à¸£à¸§à¸¡à¸à¹à¸²à¸à¸±à¸à¸ªà¹à¸</div> 1207 </div> 1208 </div> 1209 <div class="cart22_action"> 1210 <a href="https://www.ecocomshop.net/cart" class="cart22_button cart22_cart" :class="is_loading?'cart22_button_loading':''" :style="{color: cc_color, outlineColor: cc_color}">à¸à¸¹à¸ªà¸´à¸à¸à¹à¸²à¹à¸à¸à¸°à¸à¸£à¹à¸²</a> 1211 <a href="https://www.ecocomshop.net/checkout" class="cart22_button cart22_checkout" :class="is_loading?'cart22_button_loading':''" :style="{backgroundColor: cc_color}">à¹à¸£à¸´à¹à¸¡à¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸</a> 1212 </div> 1213 <div class="cart22_action"> 1214 <div class="cart22_continue" 1215 @click="cartHide"><span style="transform: rotate(180deg); display: inline-block;">➜</span> à¹à¸¥à¸·à¸à¸à¸à¸·à¹à¸à¸ªà¸´à¸à¸à¹à¸²à¹à¸à¸´à¹à¸¡ </div> 1216 </div> 1217 </div> 1218 </div> 1219 </div> 1220</div>
1221<script type="text/javascript"> 1222 var cart22_vm; 1223 document.addEventListener("DOMContentLoaded", function (event) { 1224 cart22_vm = new Vue({ 1225 store: lnw_store, 1226 components: { 1227 'cart-item' : { 1228 props: ['item'], 1229 data: function() { 1230 return { 1231 edit_quantity_value: null 1232 } 1233 }, 1234 computed: { 1235 can_increase: function() { 1236 if(this.quantity_value < this.item.remain) { 1237 return true; 1238 } 1239 return false; 1240 }, 1241 can_decrease: function() { 1242 if(this.quantity_value > 0) { 1243 return true; 1244 } 1245 return false; 1246 }, 1247 is_flash_sale: function() { 1248 if(this.item.sale_promotion_id) { 1249 return true; 1250 } 1251 if(this.item.promotions && this.item.promotions.find(function(p){ return (p && p.toLowerCase().indexOf('flash')>-1); })) { 1252 return true; 1253 } 1254 if(this.item.promotion_datas) { 1255 var ps = []; 1256 for(var k in this.item.promotion_datas){ 1257 ps.push(this.item.promotion_datas[k]); 1258 } 1259 return ps.some(function(p){ return p && p.type=='sale'; }); 1260 } 1261 return false; 1262 }, 1263 quantity_value: { 1264 get: function() { 1265 if(this.edit_quantity_value !== null) { 1266 return this.edit_quantity_value 1267 } 1268 return this.item.quantity; 1269 }, 1270 set: function(val) { 1271 var that = this; 1272 this.edit_quantity_value = val; 1273 this.$store.dispatch('cart/set_product_quantity', { 1274 iid: this.item.iid, 1275 spec: this.item.spec, 1276 quantity: val, 1277 success: function() { 1278 that.edit_quantity_value = null; 1279 } 1280 }) 1281 } 1282 } 1283 }, 1284 methods: { 1285 increase_quantity: function() { 1286 if(!this.can_increase) { 1287 return; 1288 } 1289 this.quantity_value ++; 1290 this.alert_limit(); 1291 }, 1292 decrease_quantity: function() { 1293 if(!this.can_decrease) { 1294 return; 1295 } 1296 this.quantity_value --; 1297 this.alert_limit(); 1298 }, 1299 alert_limit: function() { 1300 if(!this.item || !this.item.promotion_datas){ return; } 1301 var promo = null; 1302 Object.keys(this.item.promotion_datas).forEach(function(pid){ 1303 var p = this.item.promotion_datas[pid]; 1304 if(p && p.type === 'sale' && !promo){ 1305 promo = p; 1306 } 1307 }.bind(this)); 1308 if(!promo){ return; } 1309 var limit = promo.order_limit || promo.max_quantity; 1310 if(!limit){ return; } 1311 var unit = this.item.unit || ''; 1312 if(this.quantity_value > limit){ 1313 __lnw__.simpleAlert(__lnw__.show_lang('FLASHSALE-LIMIT-OVER', limit, unit)); 1314 }else if(this.quantity_value == limit){ 1315 __lnw__.simpleAlert(__lnw__.show_lang('FLASHSALE-LIMIT-REACH', limit, unit)); 1316 } 1317 } 1318 }, 1319 template: `<div class="cart22_item"> 1320 <div class="cart22_item_right"> 1321 <a :href="item.url"> 1322 <div class="cart22_item_img"> 1323 <img :src="item.thumbnail"> 1324 </div> 1325 </a> 1326 </div> 1327 <div class="cart22_item_left"> 1328 <div v-if="item.remain < item.quantity" class="cart22_tag_warning">สิà¸à¸à¹à¸²à¸à¸µà¹à¹à¸«à¸¥à¸·à¸à¹à¸¡à¹à¹à¸à¸µà¸¢à¸à¸à¸</div> 1329 <div class="cart22_item_name"> 1330 <template v-if="item.parent_name" > 1331 <a :href="item.url" v-text="item.parent_name"></a> 1332 <div class="cart22_subitem_name"><span class="icon-subitem">➜</span> {{item.sku_name}}</div> 1333 </template> 1334 <template v-else> 1335 <a :href="item.url" v-text="item.name"></a> 1336 </template> 1337 <div v-for="(promotion, index) in item.promotions" class="cart22_promotions" :key="index" title="à¹à¸à¹à¸²à¸£à¹à¸§à¸¡à¹à¸à¸£à¹à¸¡à¸à¸±à¹à¸">à¹à¸à¹à¸²à¸£à¹à¸§à¸¡à¹à¸à¸£à¹à¸¡à¸à¸±à¹à¸ {{ promotion }}</div> 1338 </div> 1339 <div class="cart22_item_price">฿ {{price_format(item.unit_price,2)}} <span v-if="is_flash_sale" class="cart22_flash_badge">â¡ Flash Sale</span></div> 1340 <div class="cart22_item_count"> 1341 <div class="cart22_item_countbutton cart22_item_increase" @click="increase_quantity" :class="{disabled:(!can_increase)}"> 1342 <img src="https://www.ecocomshop.net/system/application/modules/lnwshop/_images/cart22/add.png"/></div> 1343 <div class="cart22_item_countinput"><input type="number" v-model.number="quantity_value" min="0" max="item.remain" /></div> 1344 <div class="cart22_item_countbutton cart22_item_decrease" @click="decrease_quantity" :class="{disabled:(!can_decrease)}"> 1345 <img v-if="quantity_value == 1" class="delete_icon" src="https://www.ecocomshop.net/system/application/modules/lnwshop/_images/cart22/delete.png"/> 1346 <img v-else src="https://www.ecocomshop.net/system/application/modules/lnwshop/_images/cart22/remove.png"/> 1347 </div> 1348 </div> 1349 </div> 1350 </div>` 1351 } 1352 }, 1353 el: '#cart22_container', 1354 data: function () { 1355 var data = { 1356 cart_is_show: false, 1357 cart_is_hiding: false, 1358 mem_ycoord: 0, 1359 cc_color: '#007bff' 1360 }; 1361 return data; 1362 }, 1363 computed: { 1364 items: function() { 1365 if(this.$store.state.cart && this.$store.state.cart.data && this.$store.state.cart.data.items) { 1366 return this.$store.state.cart.data.items 1367 } 1368 return []; 1369 }, 1370 discounts: function() { 1371 if(this.$store.state.cart && this.$store.state.cart.data && this.$store.state.cart.data.after_product_discounts) { 1372 return this.$store.state.cart.data.after_product_discounts; 1373 } 1374 return []; 1375 }, 1376 total_num: function() { 1377 return number_format(this.items.length); 1378 }, 1379 total_quantity: function() { 1380 return this.items.reduce(function(a, item) { 1381 return a+ item.quantity 1382 },0); 1383 }, 1384 total_price: function() { 1385 return this.items.reduce(function(a, item) { 1386 return a + item.total_price 1387 },0); 1388 }, 1389 after_product_price: function() { 1390 if(this.$store.state.cart && this.$store.state.cart.data && this.$store.state.cart.data.after_product_price) { 1391 return this.$store.state.cart.data.after_product_price; 1392 } 1393 return this.total_price; 1394 }, 1395 alert_is_show: function() { 1396 return false && (this.total_quantity > 0); 1397 }, 1398 is_loading: function() { 1399 if(this.$store.state.cart && this.$store.state.cart.data) { 1400 return this.$store.state.cart.is_loading; 1401 } 1402 return false;
1403 }, 1404 is_initing: function() { 1405 if(this.$store.state.cart && this.$store.state.cart.data){ 1406 return false; 1407 } 1408 return true; 1409 } 1410 }, 1411 watch: { 1412 alert_is_show: function(newval) { 1413 var elements = document.querySelectorAll(".register_badge, .adminBar .quickMenu .navigate .navi-container, .pageCapContainer"); 1414 if(newval) { 1415 elements.forEach(function(element) { 1416 element.classList.add('cart22_adjustOther'); 1417 element.classList.add('cart22_adjustOther_show'); 1418 }); 1419 setTimeout(function () { 1420 elements.forEach(function(element) { 1421 element.classList.remove('cart22_adjustOther_show'); 1422 }); 1423 }, 1000); 1424 } else { 1425 elements.forEach(function(element) { 1426 element.classList.remove('cart22_adjustOther'); 1427 element.classList.add('cart22_adjustOther_hide'); 1428 }); 1429 setTimeout(function () { 1430 elements.forEach(function(element) { 1431 element.classList.remove('cart22_adjustOther_hide'); 1432 }); 1433 }, 500); 1434 } 1435 } 1436 }, 1437 methods: { 1438 cartShow: function() { 1439 this.cart_is_show = true; 1440 document.body.classList.add('cart22_body_noscroll'); 1441 1442 this.mem_ycoord = window.scrollY; 1443 var style = document.body.style; 1444 style.position = 'fixed'; 1445 style.left = '0'; 1446 style.right = '0'; 1447 style.top = - this.mem_ycoord + 'px'; 1448 }, 1449 cartHide: function() { 1450 this.cart_is_hiding = true; 1451 let that = this; 1452 setTimeout(function () { 1453 that.cart_is_show = false; 1454 that.cart_is_hiding = false; 1455 document.body.classList.remove('cart22_body_noscroll'); 1456 var style = document.body.style; 1457 style.position = ''; 1458 style.left = ''; 1459 style.right = ''; 1460 style.top = ''; 1461 window.scroll({top: that.mem_ycoord}); 1462 1463 }, 250); 1464 }, 1465 } 1466 }); 1467 }); 1468</script>
1468<div id="lnw-gototop" class="" onclick="lnw_gototop();"><span class="text"></span></div><style class="lnw_custom_css_container" type="text/css"></style></div>
1468<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/external/vue.min.js"></script>
vendor: 1 bytes, line 1468
1468
1469<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/external/es6-promise.auto.min.js"></script>
vendor: 1 bytes, line 1469
1469
1470<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/external/vuex.min.js"></script>
vendor: 1 bytes, line 1470
1470
1471<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/system/application/modules/lnwshop/_js/many.min.js?t=20211123000000"></script>
vendor: 1 bytes, line 1471
1471
1472<script language="JavaScript" type="text/javascript">var LNWFILE_JSONP = 'lnwfile_jsonp'; 1473function file_upload_seller_url () {return "https://cf-up.lnwfile.com/lnwshop/v2/upload_seller/";} 1474function file_upload_buyer_url () {return "https://cf-up.lnwfile.com/lnwshop/v2/upload_buyer/";} 1475function file_upload_url () {return "https://cf-up.lnwfile.com/lnwshop/upload/";} 1476function file_upload_flash_url () {return "https://cf-up.lnwfile.com/lnwshop/upload_flash/";} 1477function file_upload_icon_url () {return "https://cf-up.lnwfile.com/lnwshop/upload_icon/";} 1478function file_upload_document_url () {return "https://cf-up.lnwfile.com/lnwshop/v2/upload_document/";} 1479function file_upload_accounting_url () {return "https://aca-up.lnwfile.com/lnwshop/v2/upload_document/";} 1480function file_upload_manage_url () {return "https://cf-up.lnwfile.com/lnwshop/upload_manage/";} 1481function file_flash_url () {return "https://cf-up.lnwfile.com/swf/swfupload.swf";} 1482function file_uploadify_url () {return "https://cf-up.lnwfile.com/swf/uploadify.swf";} 1483function file_jsonp_url (uri) {return "https://cf-up.lnwfile.com/lnwshop/jsonp/"+(uri===undefined?"":uri)+"?"+LNWFILE_JSONP+"=?";} 1484 function base_url (uri) {return "https://www.ecocomshop.net/"+(uri===undefined?"":uri.replace(/^\//,''));} 1485 function site_url (uri) {return "https://www.ecocomshop.net/"+(uri===undefined?"":uri.replace(/^\//,''));} 1486 function front_url (uri) {return "https://www.ecocomshop.net/"+(uri===undefined?"":uri.replace(/^\//,''));} 1487 function manage_url (uri) {return "https://a.lnwstore.com/ecocomshop/"+(uri===undefined?"":uri.replace(/^\//,''));} 1488 function handle_url_from_import (url) { 1489 if(typeof url !== 'string') { 1490 return url; 1491 } 1492 url = url.trim(); 1493 if(/^https?:\/\//.test(url)) { 1494 return url; 1495 }return url;} 1496var css_files = ['https://www.ecocomshop.net/system/application/templates/lnwshop/default/_css/basic.min.css?t=20260810000053','https://www.ecocomshop.net/cache/lnwshop/142/079/css/20260416171907/style.css']; 1497function css_url () {return css_files.join(',');} 1498const WEBID = 142079; 1499function deepFreeze(e){const t=Object.getOwnPropertyNames(e);for(const o of t){const t=e[o];t&&"object"==typeof t&&deepFreeze(t)}return Object.freeze(e)} 1500const WEBDATA = deepFreeze({"id":"142079","webname":"ecocomshop","name":"EcocomShop","image":"https:\/\/cf.lnwfile.com\/nsr3eg.png","avatar":"https:\/\/cf.lnwfile.com\/_\/cf\/_resize\/100\/100\/ns\/r3\/eg.png","front_url":"https:\/\/www.ecocomshop.net\/","manage_url":"https:\/\/a.lnwstore.com\/ecocomshop\/","share_url":"https:\/\/www.ecocomshop.net\/checkout","join_num":16,"open_date_th":"14 ม.à¸. 2557","open_date_diff":"1 decadeà¸à¸µà¹à¸à¹à¸²à¸à¸¡à¸²","order_url":"https:\/\/lnw.me\/order\/ecocomshop","lnwbar":{"color":"default"},"price_round_config":null,"slideshow":{"is_enabled":0},"gointer":{"is_enabled":0},"mobileSiteEnabled":1}); 1501 function _add_settings_data(settings, name, value) { 1502 if(typeof settings.data == 'undefined' || settings.data == null || settings.data == '') { 1503 settings.data = name + '=' + value; 1504 } else if(typeof settings.data=='string') { 1505 settings.data += '&' + name + '=' + value; 1506 } else if($.isArray(settings.data)) { 1507 settings.data.push({name: name, value: value}); 1508 } else if(typeof FormData !== 'undefined') { 1509 settings.data.append(name, value); 1510 } 1511 } 1512 if(window.top != window) { 1513 var allowedFrame = false; 1514 try { 1515 } catch(error) {} 1516 if(!allowedFrame) {
1517 var alertFunc = function() { 1518 // Bootstrap also runs in <head>, before the body exists. 1519 if(!document.body) { 1520 return; 1521 } 1522 var heading = document.createElement('h1'); 1523 heading.style.margin = '200px'; 1524 var link = document.createElement('a'); 1525 link.href = window.location.href; 1526 link.target = '_top'; 1527 link.textContent = 'Click here to enter'; 1528 heading.appendChild(link); 1529 document.body.textContent = ''; 1530 document.body.appendChild(heading); 1531 }; 1532 alertFunc(); 1533 window.addEventListener('DOMContentLoaded', alertFunc); 1534 window.addEventListener('load', alertFunc); 1535 } 1536 } 1537 1538 $(document).ready(function() { 1539 $.ajaxSetup({ 1540 dataType: "html", 1541 cache: false 1542 }); 1543 $(this).ajaxSend(function(e, xhr, settings) { 1544 if(!settings.data){ 1545 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 1546 } 1547 _add_settings_data(settings, 'ajaxxxx', true); 1548 _add_settings_data(settings, 'ajaxxxx_dataType', settings.dataType); 1549 if((typeof lnw_store !== 'undefined') && lnw_store.state.user.data && lnw_store.state.user.data.csrf_token) { 1550 _add_settings_data(settings, 'csrf_token', lnw_store.state.user.data.csrf_token); 1551 } 1552 }); 1553 }); 1554 1555</script>
vendor: 1 bytes, line 1555
1555
1556<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/system/application/modules/lnwshop/_js/lang_th.js?t=20250110114600"></script>
1556 1557
1558<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/system/application/modules/lnwshop/_js/default.min.js?t=20260902170746"></script>
1558 1559 1560 1561 1562 <div class="shortcut-contact-container btn-chat-container"> 1563 <div class="btn btn-chat"> 1564 <div class="close-icon" onclick="goto_chat();"></div> 1565 <div class="icon"></div> 1566 <div class="text">à¸à¸¹à¸à¸à¸¸à¸¢-สà¸à¸à¸à¸²à¸¡</div> 1567 </div> 1568 <ul class="social-button"> 1569 <li class="btn btn-email"><a href="mailto:[email protected]?subject=%E0%B8%AA%E0%B8%AD%E0%B8%9A%E0%B8%96%E0%B8%B2%E0%B8%A1%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%20-%20ecocomshop&body=%E0%B8%AA%E0%B8%A7%E0%B8%B1%E0%B8%AA%E0%B8%94%E0%B8%B5%20%E0%B8%89%E0%B8%B1%E0%B8%99%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%AD%E0%B8%9A%E0%B8%96%E0%B8%B2%E0%B8%A1%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1%E0%B9%80%E0%B8%95%E0%B8%B4%E0%B8%A1" onclick="return lead_contactus_track();"> 1570 <div class="icon"></div> 1571 <div class="text">à¸à¸µà¹à¸¡à¸¥ [email protected]</div> 1572 </a></li> 1573 <li class="btn btn-contactus"> 1574 <a href="https://www.ecocomshop.net/contactus" onclick="return lead_contactus_track();"> 1575 <div class="icon"></div> 1576 <div class="text">à¸à¸£à¸à¸à¸à¸à¸£à¹à¸¡à¸à¸´à¸à¸à¹à¸</div> 1577 </a></li> 1578 <li class="btn btn-mobile"><a href="tel:063-269-8988" onclick="return lead_phone_track();"> 1579 <div class="icon"></div> 1580 <div class="text">à¹à¸à¸£ 063-269-8988</div> 1581 </a></li> 1582 <li class="btn btn-youtube"><a target="_blank" href="https://www.youtube.com/ecocomshop"> 1583 <div class="icon"></div> 1584 <div class="text">ecocomshop</div> 1585 </a></li> 1586 <li class="btn btn-facebook"><a target="_blank" href="https://www.messenger.com/t/ecocomshop" onclick="return lead_facebook_track();"> 1587 <div class="icon"></div> 1588 <div class="text">ecocomshop</div> 1589 </a></li> 1590 <li class="btn btn-line"><a href="https://line.me/R/ti/p/@ecocomshop" target="_blank" onclick="return lead_line_track();"> 1591 <div class="icon"></div> 1592 <div class="text">Add @ecocomshop</div> 1593 </a></li> 1594 </ul> 1595 </div> 1596 1597
1598<script language="JavaScript"> 1599 document.addEventListener("DOMContentLoaded", function () { 1600 var lead_datas = [ 1601 {selector:'a[href*="email:"], a[href*="contactus"]',onclick:'return lead_contactus_track()'}, 1602 {selector:'a[href*="tel:"]',onclick:'return lead_phone_track()'}, 1603 {selector:'a[href*="line.me/ti/p"], a[href*="nav.cx"]',onclick:'return lead_line_track()'}, 1604 {selector:'a[href*="messenger.com"], a[href*="facebook.com"]',onclick:'return lead_facebook_track()'}, 1605 ]; 1606 lead_datas.forEach(function(lead_data) { 1607 var nodeList = document.querySelectorAll(lead_data.selector); 1608 for(var i=0;i<nodeList.length;i++) { 1609 var node = nodeList[i]; 1610 if(node.getAttribute('onclick') == null) { 1611 node.setAttribute('onclick',lead_data.onclick); 1612 } 1613 } 1614 }); 1615 }); 1616 function lead_contactus_track() { 1617 console.log("Warning: lead type contactus is missing."); 1618 return true; 1619 } 1620 function lead_phone_track() { 1621 console.log("Warning: lead type phone is missing."); 1622 return true; 1623 } 1624 function lead_facebook_track() { 1625 console.log("Warning: lead type facebook is missing."); 1626 return true; 1627 } 1628 function lead_twitter_track() { 1629 console.log("Warning: lead type twitter is missing."); 1630 return true; 1631 } 1632 function lead_instagram_track() { 1633 console.log("Warning: lead type instagram is missing."); 1634 return true; 1635 } 1636 function lead_line_track() { 1637 console.log("Warning: lead type line is missing."); 1638 return true; 1639 } 1640 </script>
1640<script type="text/javascript"> var first_sync_accounts_time = true; 1641 function accounts_update__hook_after_check_account() { 1642 if(first_sync_accounts_time){ 1643 first_sync_accounts_time = false; 1644 } 1645 } var accountsTime = null; 1646function accounts_update() { 1647 var data = { 1648 data: 'e3xfxJBcvB42ZZ02HnsQ58yGck7e5Pp3KJYnKDNTWtLNeV2uLL4HUmKzc3aAm_O57JHegHny6klp4hZT8dmn3qzmjdEY27rov2OiDgdng0gfvrpPcB1mHvqYuwFYxbqKLS69G7et8D2npWksrJFurldZ9H9TY__u8U3FxJVQWP0xyxJ9lAs06lDdt5rHB7K4qj3nxLxFbZTkPQidlodQEzArTXuVjaHzDQ5jltI09vgbUcoIKJ5JFPEYeMmT90bV0vAsjcfvBHQ4a4frxiLmlVO5AC7It6g166Neij3CJxLskF3BqCakOpcl70MUF5vL4E_SGuiR4hlVHbLljF5Rws_r05abw3iqw6jUFBGWD-okf9CdCK2ZeOVfMGRMYCGAchz-LbZYe4uLdrF7erturg==', 1649 revision_id: 3573 1650 }; 1651 $.getJSON("https://static.lnw.me/jsonp/heartbeat?lnwaccounts_jsonp=?", data, function(response) { 1652 if(response.success) { 1653 if(response.logged_in) { 1654 //$.cookie('_lnwacct_142079_www_ecocomshop_net___tk2', response._lnwacct, {path: '/'}); 1655 document.cookie = encodeURIComponent("_lnwacct_142079_www_ecocomshop_net___tk2") + "=" + encodeURIComponent(response._lnwacct) + "; path=/"; 1656 if(response.state_change != undefined && response.state_change) { 1657 //alert('reload'); 1658 window.location.href = window.location.href; 1659 return; 1660 } 1661 } 1662 if(typeof accounts_update__hook_after_check_account == 'function') { 1663 accounts_update__hook_after_check_account(); 1664 } 1665 } 1666 if(accountsTime != null) { 1667 clearTimeout(accountsTime); 1668 }
1669 accountsTime = setTimeout("accounts_update();", 15 * 60 * 1000); 1670 }); 1671 $.ajax({ 1672 type: 'GET', 1673 data: {}, 1674 url: 'https://www.ecocomshop.net/lnwbar/action/session' 1675 }); 1676} 1677$(document).ready(function() { 1678 if(window.top == window) { 1679 accounts_update(); 1680 } 1681}); 1682</script>
1682<script language="JavaScript" type="text/javascript" src="https://www.ecocomshop.net/system/application/modules/lnwshop/lnwbar/_js/vue.min.js?t=20260904205501"></script>
vendor: 1 bytes, line 1682
1682
1683<script type="text/javascript">document.addEventListener("DOMContentLoaded", function(event) { });</script>
1683</body> 1684</html>
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.