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!
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ự.
Giá cả sẽ thay đổi tùy thuộc vào khoảng cách, phương tiện di chuyển (xe máy hoặc taxi), số lượng chuyên gia trị liệu và số giờ bạn yêu cầu.
Bước 1. Chọn thời gian và địa điểm bạn muốn
Đặt chỗ có sẵn
từ 10:00 LÀ đến 6:00 Thủ tướng
Chọn ngày và giờ đặt phòng mong muốn ở trên, sau đó đặt ghim vị trí của bạn trên bản đồ.
Chúng tôi sẽ sử dụng thông tin này để tính toán khoảng cách và cập nhật giá dựa trên vị trí của bạn.
Tìm kiếm địa điểm của bạn
Chưa chọn ghim vị trí. Vui lòng đặt ghim của bạn trên bản đồ để tiếp tục.
Bước 2. Hoàn tất đặt phòng của bạn
Vui lòng chọn thời gian và địa chỉ để massage. Sau khi hoàn tất, bạn sẽ có thể điền phần còn lại của thông tin đặt chỗ.
Đặt chỗ có sẵn
từ 10:00 LÀ đến 10:00 Thủ tướng
Chọn dịch vụ của bạn:
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.
⚠️ 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("

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
});
});-->