Đặt lịch hẹn tại bãi biển Bo Phut

Tận hưởng sự tiện lợi khi lên lịch trình liền mạch.

Trải nghiệm sự dễ dàng và hiệu quả khi lập kế hoạch cho ngày spa hoàn hảo của bạn!

Bo Phut Beach Branch

Chi nhánh Bãi biển Bo Phut

Bạn đang đặt chỗ cho chi nhánh Bãi biển Bo Phut.

Mở Google Map Chọn Chi Nhánh Khác

Massage Tại Salon Của Chúng Tôi

Tận hưởng trọn vẹn buổi làm đẹp tại salon Nakee.

Massage Tại Địa Điểm Của Bạn

Hãy tận hưởng sự chăm sóc tại nơi bạn ở – nhà, khách sạn hoặc biệt thự.

Đặt chỗ có sẵn

từ 10:00 LÀ đến 10:00 Thủ tướng

Chọn dịch vụ của bạn:
Vui lòng thêm dịch vụ.
    Chọn nhà trị liệu của bạn:
    Vui lòng chọn chuyên gia trị liệu hoặc giữ trống và để chúng tôi chỉ định chuyên gia trị liệu phù hợp theo dịch vụ bạn yêu cầu.
      HOẶC
      ⚠️ Vui lòng đảm bảo gửi yêu cầu đặt chỗ cho chúng tôi qua ứng dụng bạn đã chọn. Chúng tôi sẽ xác nhận đặt chỗ của bạn chỉ qua WhatsApp hoặc Line.
      ℹ️ Một tin nhắn được định dạng sẽ được tạo dựa trên lựa chọn cuộc hẹn của bạn. Bạn có thể gửi nó qua ứng dụng nhắn tin ưa thích được liệt kê ở trên.
      '; $( window ).on( "resize", function() { on_resize(); }); on_resize(); attentionBoxShift(); setTimeout(function(){ load_therapists_list(); },2000); $("#view_products,.choosed_products,#open_service-menu").on('click',function(){ $("#products_list_pop").show(300); $(".choosed_products").addClass('error'); setTimeout(function(){ $("body").addClass("product_chooser"); },300); }); $("#products_list_pop_close").on('click',function(){ $("#products_list_pop").hide(300); setTimeout(function(){ $("body").removeClass("product_chooser"); },20); }); $("#view_theropist,.choosed_theropist,#open_therapists,#open_therapists_br").on('click',function(){ $("#theropist_list_pop").show(300); if (ajax_runned == 0) { ajax_runned = 1; load_therapists_list(); } setTimeout(function(){ $("body").addClass("product_chooser"); },300); }); $("#open_holiday,#open_holiday_br").on('click',function(){ $("#holiday_list_pop").show(300); }); $(window).on('scroll', function () { if (ajax_runned != 0) return; ajax_runned = 1; load_therapists_list(); }); $("#theropist_list_pop_close").on('click',function(){ $("#theropist_list_pop").hide(300); setTimeout(function(){ $("body").removeClass("product_chooser"); },20); }); $("#holiday_list_pop_close").on('click',function(){ $("#holiday_list_pop").hide(300); }); $(".service").each(function(){ var t = $(this); t.find("table tr").each(function(){ var tr = $(this); tr.append(""); }); }); $(".add_prod.btn").on('click',function(){ var t = $(this), p = t.parents('.service'), tr = t.parents('tr'); tr.addClass('active'); var tile = p.find(".prod-title h2").text(); if (lang != 'th') tile += ' ( '+p.data('en')+' )'; var pr = 0; if ( massage_type == 1 ) pr = tr.data('price'); else pr = tr.data('outside-price'); $(".choosed_products ul").append('
    • '+checkmark+tile+'
      '+' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]' +'
    • '); if ($(".choosed_products ul li").length == 0 ) { $(".choosed_products .no-prod").show(); $("#products_list_pop_close").removeClass("selected"); } else { $(".choosed_products .no-prod").hide(); $("#products_list_pop_close").addClass("selected"); } calculate_totals_html(); attentionBoxShift(); }); $(".remove_prod.btn").on('click',function(){ var t = $(this), p = t.parents('.service'), tr = t.parents('tr'); tr.removeClass('active'); $(".choosed_products ul ."+p.attr('id')+".pid-"+tr.data('prod_id')).remove(); if ($(".choosed_products ul li").length == 0 ) { $(".choosed_products .no-prod").show(); $("#products_list_pop_close").removeClass("selected"); } else { $(".choosed_products .no-prod").hide(); $("#products_list_pop_close").addClass("selected"); } calculate_totals_html(); attentionBoxShift(); }); var ga4EventSent = false; $("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('keyup',function(){ $(this).removeClass('error'); if (ga4EventSent) return; ga4EventSent = true; gtag("event", "waBookingFormStart", { menu_item_name: "Start WhatsApp Booking Form", menu_item_url: "https://www.nakee.spa/vi/dat-cho-truc-tuyen/dat-lich-hen-tai-bai-bien-bo-phut/", }); }); $("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('change',function(){ attentionBoxShift(); }); $('#visit-date, #visit-time').on('keyup change', function() { var holiday = checkBookingConflict(''); if (holiday){ $("#visit-date, #visit-time").addClass('error'); alert(holiday); } }); $('#visit-date-o, #visit-time-o').on('keyup change', function() { var holiday = checkBookingConflict('-o'); if (holiday){ $("#visit-date-o, #visit-time-o").addClass('error'); alert(holiday); } }); $("#submit_req").on('click', function(){ var m = validate_message('whatsapp'); if (m == false) return; $("#submit_req_action").attr('href', 'https://api.whatsapp.com/send?phone=66990655880&&text='+m); document.getElementById("submit_req_action").click(); success_action(m); }); $("#submit_req_line").on('click', function(){ var m = validate_message('line'); if (m == false) return; $("#submit_req_action_line").attr('href', 'https://line.me/R/oaMessage/%40355kcqpj/?'+m); document.getElementById("submit_req_action_line").click(); success_action(m); }); $(".massage-type-selector .type-option").on('click', function(){ var t = $(this); $(".massage-type-selector .type-option").removeClass("selected"); $(this).addClass("selected"); if (massage_type == $(this).data('massagetype')) return; massage_type = $(this).data('massagetype'); if (massage_type == 2) { $(".home-massage").slideDown(400); $(".book_apointment .visitinfo").hide(); $(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideUp(400); if (map_loaded == 0) { initMap(); map_loaded = 1; setTimeout(function(){ $("#visit-date-o,#visit-time-o").addClass("attention-box"); },100); } } else { $(".home-massage").slideUp(400); $(".book_apointment .visitinfo").show(); $(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideDown(400); } outside_price_update(); }); $(".massage-beds label").on('click', function(){ var t = $(this); $(".massage-beds label").removeClass('selected'); t.addClass('selected'); calculate_totals_html(); }); function success_action(m){ var params = "n=" + $("#customername").val(); if ($("#customerphone").length != 0) params += "&p=" + $("#customerphone").val(); $(".book_apointment").empty().append("
      Loading ...
      Bạn đã tạo thành công yêu cầu đặt lịch hẹn!
      "); window.location.href="https://www.nakee.spa/vi/dat-phong-cam-on-ban/?"+params+"&msg="+m; } function load_therapists_list() { if ($("#theropist_list_pop .theropists").hasClass("loaded")) return; $.ajax({ url: 'https://www.nakee.spa/wp-admin/admin-ajax.php' , method: 'POST', dataType : "html", data: { action: 'booking_terapist_list', branch_id: 729, lng: 'vi' }, success: function(response) { $("#theropist_list_pop .theropists").addClass("loaded").empty().append(response); $(".theropists .theropist").on('click',function(){ var t = $(this); if (t.hasClass('vacation')) return; if (!t.hasClass('active')){ t.addClass('active'); $(".choosed_theropist ul").append('
    • '+checkmark+t.data('en')+'
    • '); } else { t.removeClass('active'); $('.prod-item.therop-'+t.attr('id')).remove(); } if ($(".choosed_theropist ul li").length == 0 ) $(".choosed_theropist .no-prod").show(); else $(".choosed_theropist .no-prod").hide(); attentionBoxShift(); }); renderBookingHolidayTable('holiday_list_table'); }, error: function() { alert('There was an error with loading the therapists list.'); } }); } function validate_message(t){ var geusts = parseInt($("#visitqty").val()); if ($("#customername").val() == ''){ $("#customername").addClass('error'); $('html, body').animate({ scrollTop: $('#customername').offset().top-70 }, 200); setTimeout( () => { alert("Tên là bắt buộc!"); },201); return false; } /* if ($("#customerphone").val() == ''){ $("#customerphone").addClass('error'); $('html, body').animate({ scrollTop: $('#customerphone').offset().top-70 }, 200); setTimeout( () => { alert("Bắt buộc phải nhập số điện thoại!"); },201); return false; } */ if ($("#visitqty").val() == '' || geusts < 1){ $("#visitqty").addClass('error'); $('html, body').animate({ scrollTop: $('#visitqty').offset().top-70 }, 200); setTimeout( () => { alert("Vui lòng chọn số lượng khách!"); },201); return false; } if ($("#visit-date").val() == ''){ $("#visit-date").addClass('error'); $('html, body').animate({ scrollTop: $('#visit-date').offset().top-70 }, 200); setTimeout( () => { alert("Vui lòng chọn dữ liệu cuộc hẹn của bạn!"); },201); return false; } if ($("#visit-time").val() == ''){ $("#visit-time").addClass('error'); $('html, body').animate({ scrollTop: $('#visit-time').offset().top-70 }, 200); setTimeout( () => { alert("Vui lòng chọn thời gian hẹn của bạn!"); },201); return false; } if (!timeValid) { setTimeout( () => { alert("Hãy đảm bảo thời gian hẹn của bạn là hợp lệ!"); },201); return false; } var holiday = checkBookingConflict(''); if (holiday != false){ $("#visit-date, #visit-time").addClass('error'); $('html, body').animate({ scrollTop: $('#visit-date').offset().top-70 }, 200); setTimeout( () => { alert(holiday); },201); return false; } if ($(".choosed_products li.prod-item").length == 0){ $(".choosed_products").addClass('error'); $('html, body').animate({ scrollTop: $('.products_choice').offset().top-70 }, 200); setTimeout( () => { alert("Vui lòng chọn dịch vụ của bạn!"); },201); return false; } var u = '',brek = '%0A'; switch (t){ case 'whatsapp': brek = '%0A'; break; case 'line': brek = '%0D%0A'; break; } u += encodeURIComponent('Booking Information:'); u += brek+encodeURIComponent('Massage '+(massage_type == 1 ? "AT OUR SHOP ("+$(".branch_indicator").data('name')+")" : "OUTSIDE AT YOUR LOCATION")); if (massage_type == 2) u += brek+encodeURIComponent(($('input[name="massage-bed"]:checked').val() == '1' ? "Portable Massage Bed: Included" : "Portable Massage Bed: NOT Included")); u += brek+brek+encodeURIComponent('Name: '+$("#customername").val()); //u += brek+encodeURIComponent('phone number: '+$("#customerphone").val()); u += brek+encodeURIComponent('Number of guests: '+$("#visitqty").val()+' '+(geusts <= 1 ? 'person' : 'persons')); u += brek+encodeURIComponent('Preferred visit time: '+ $("#visit-date").val() + ' ' + $("#visit-time").val() ); u += brek+brek+encodeURIComponent('Required Service: '); /* $(".choosed_products li.prod-item").each(function(){ u += brek+encodeURIComponent(' > '+$(this).text()+' ('++' ฿)'); }); */ var tot = 0; $(".services tr.active").each(function(){ var tr=$(this), sp = $(this).parents('.service'), h2=sp.find('.prod-title h2'), pr = 0; if ( massage_type == 1 ) pr = $(this).data('price'); else pr = $(this).data('outside-price'); tot += parseInt(pr); var tile = h2.text(); if (lang != 'th') tile += ' ( '+sp.data('en')+' )'; u += brek+encodeURIComponent('> '+tile); u += brek+encodeURIComponent(' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]'); }); if (tot != 0) { if ($('input[name="massage-bed"]:checked').val() == '1') { u += brek+brek+encodeURIComponent('Taxi Transport For Massage Bed: '+taxi+' ฿'); tot += parseInt(taxi); } /* u += encodeURIComponent('------')+brek; u += encodeURIComponent('Total Price: '+formatPrice(tot)+' ฿')+brek; */ } if ($(".choosed_theropist li.prod-item").length > 0) { u += brek+brek+encodeURIComponent('Required Therapist: '); $(".choosed_theropist li.prod-item").each(function(){ u += brek+encodeURIComponent(' > '+$(this).text()); }); } else { u += brek+brek+encodeURIComponent('Chosen Therapist: You can choose for ')+(geusts <= 1 ? 'me' : 'us')+'.'; } if ($("#clientnote").val() != '') u += brek+brek+encodeURIComponent('Additional Request: ')+brek+encodeURIComponent($("#clientnote").val()); u += brek+brek+encodeURIComponent('📍 Branch Location: ')+brek+encodeURIComponent($(".branch_indicator").data('name')); if (massage_type == 1) { u += brek+encodeURIComponent('🗺️ Google Maps: ')+encodeURIComponent($(".branch_indicator").data('maplink')); } else { u += brek+brek+encodeURIComponent('📍 Your Location Map: '+$("#address_url").val()); u += brek+encodeURIComponent('Your Address: '+$("#visit-address").val()); u += brek+encodeURIComponent('Your Room/Flat Number: '+$("#visit-flat").val()); } return u; } $("#visit-address, #visit-flat").on('change click keyup', function(){ outside_service_validation(); attentionBoxShift(); }); $("#visit-date,#visit-date-o").on('change', function(){ const selectedDate = $(this).val(); const today = new Date(); const todayStr = today.toISOString().split('T')[0]; let targetTime; if (selectedDate === todayStr) { const nowPlus1Hr = new Date(today.getTime() + 60 * 60 * 1000); const hh = nowPlus1Hr.getHours().toString().padStart(2, '0'); const mm = nowPlus1Hr.getMinutes().toString().padStart(2, '0'); targetTime = `${hh}:${mm}`; } else { targetTime = '10:00'; } $('#'+$(this).attr('id').replace('date','time')).val(targetTime).attr('min', targetTime).attr('placeholder', targetTime); }); ['', '-o'].forEach(suffix => { $(`#visit-date${suffix}, #visit-time${suffix}`).on('change', function () { timeValid = 0; const date = $(`#visit-date${suffix}`).val(); const time = $(`#visit-time${suffix}`).val(); if (!date || !time) return; validateEnteredTime(suffix); if (suffix == '-o') { outside_service_validation(); attentionBoxShift(); } }); }); // Icon click triggers focus on sibling input $(".caln-icon, .time-icon").on('click', function () { $(this).parent().find('input').trigger('focus'); }); // Validate entered time function validateEnteredTime(suffix) { timeValid = 1; const timeField = $(`#visit-time${suffix}`); if (!isTimeInAllowedRange(suffix)) { timeField.addClass('error'); timeValid = 0; alert(suffix === '' ? "Thời gian hẹn phải từ 10 giờ sáng đến 10 giờ tối." : "Thời gian hẹn phải từ 10 giờ sáng đến 6 giờ chiều."); getKohSamuiBookingTime(suffix, false); } else if (!isVisitTimeValid(suffix)) { timeField.addClass('error'); timeValid = 0; alert("Thời gian hẹn nên tối thiểu +30 phút kể từ bây giờ."); } if (timeValid) timeField.removeClass('error'); } // Check if time is +30 min from now (in Bangkok) function isVisitTimeValid(suffix) { const date = $(`#visit-date${suffix}`).val(); const time = $(`#visit-time${suffix}`).val(); if (!date || !time) return false; const selected = new Date(`${date}T${time}`); const now = new Date(); const nowBangkok = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Bangkok" })); const nowPlus30 = new Date(nowBangkok.getTime() + 30 * 60 * 1000); return selected >= nowPlus30; } // Check if time is in range (10:00 to 22:00 or 18:00) function isTimeInAllowedRange(suffix) { const time = $(`#visit-time${suffix}`).val(); if (!time) return false; const [hh, mm] = time.split(':').map(Number); if (isNaN(hh) || isNaN(mm)) return false; const maxHour = suffix === '' ? 22 : 18; return hh >= 10 && (hh < maxHour || (hh === maxHour && mm === 0)); } // Set initial values // based on Bangkok time and cutoffs function getKohSamuiBookingTime(suffix, doDate) { const now = new Date(); const nowBangkok = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Bangkok" })); const nowPlus30 = new Date(nowBangkok.getTime() + 30 * 60 * 1000); const nowPlus40 = new Date(nowBangkok.getTime() + 50 * 60 * 1000); const cutoff = new Date(nowBangkok); cutoff.setHours(suffix === '' ? 22 : 18, 0, 0, 0); const start = new Date(nowBangkok); start.setHours(10, 0, 0, 0); let dateStr, timeStr, timeStr1; if (nowPlus30 > cutoff || nowPlus30 < start) { const tomorrow = new Date(nowBangkok); tomorrow.setDate(tomorrow.getDate() + 1); dateStr = tomorrow.toISOString().split('T')[0]; timeStr = '10:00'; timeStr1 = '10:00'; } else { dateStr = nowBangkok.toISOString().split('T')[0]; const hh = nowPlus30.getHours().toString().padStart(2, '0'); const mm = nowPlus30.getMinutes().toString().padStart(2, '0'); timeStr = `${hh}:${mm}`; const hh1 = nowPlus40.getHours().toString().padStart(2, '0'); const mm1 = nowPlus40.getMinutes().toString().padStart(2, '0'); timeStr1 = `${hh1}:${mm1}`; } if (doDate) $(`#visit-date${suffix}`).val(dateStr).attr('min', dateStr); $(`#visit-time${suffix}`).val(timeStr1).attr('min', timeStr); timeValid = 1; } // Initialize both sets getKohSamuiBookingTime('', true); getKohSamuiBookingTime('-o', true); setInterval(function(){ clock_nakee(); },1000); clock_nakee(); lightbox.option({ fadeDuration: 200, resizeDuration: 200, wrapAround: true }); });-->