var base64; var tBox; var iBox; var resource; $(function () { if (!Array.prototype.filter) { Array.prototype.filter = function (fun /*, thisp */) { "use strict"; if (this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (typeof fun !== "function") throw new TypeError(); var res = []; var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in t) { var val = t[i]; // in case fun mutates this if (fun.call(thisp, val, i, t)) res.push(val); } } return res; }; } const swalz = Swal.mixin({ showClass: { popup: 'animated fadeInDown faster' }, hideClass: { popup: 'animated fadeOutUp faster' } }); //欄位名對應 var fields = { 'AccountName': '門市代號', 'AccountPass': '密碼', 'cBookStore_ID': '預約門市', 'cReserve_Date': '預約日期', 'cReserveTime_ID': '預約時段', 'cReserveItem_ID': '服務項目', 'cUser_Name': '姓名', 'cUser_EMail': 'E-mail', 'cUser_Phone': '聯絡電話', 'validCode': '驗證碼', 'agreement': '我已閱讀並同意此聲明' }; var doptions = { language: 'zh-TW', format: "yyyy/mm/dd", changeMonth: true, changeYear: true, showButtonPanel: true, startDate: "+1d", endDate: "+3m", datesDisabled: "", autoclose: true } /**---首頁end--------------------**/ //關閉視窗 $('button.closeme').click(function () { window.top.keyEsc(); return false; }); //回上一步或去其它頁 $("button.gonext").click(function () { if ($(this).data("u") !== undefined) { location.replace($(this).data("u")); } else { location.replace('index.aspx'); } return false; }); //預約 if (id('fBtn')) { //goole測試----------------------------- //$("input[name=mode]").val('T'); //$.post("/api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { // if (data.status < 0) { // swalz.fire(data.message, "", "error"); // } else { // $(".pop-contentx").empty().append(data.objectz.frm); // var sd = new Date(data.objectz.year, data.objectz.month - 1, data.objectz.day, data.objectz.hour, data.objectz.minute); // var today = sd.toISOString(); // resource = { // "summary": "門市預約", // "location": data.objectz.addr, // "description": data.objectz.item, // "start": { // "dateTime": today, // "TimeZone": "Asia/Taipei" // }, // "end": { // "dateTime": today, // "TimeZone": "Asia/Taipei" // } // }; // $('#reserve-pop').fadeIn(); // } //}, "json"); //end -------------------------------------- //門市選擇 $("select[name=cCity]").change(function () { //縣市 showBox('init'); $("select[name=cDistrict],select[name=cBookStore_ID]").find('option:not(:eq(0))').remove(); if ($("select[name=cCity]").val() !== "") { $('select[name=cDist_Temp] option[data-c=' + $("select[name=cCity]").val() + ']').clone().appendTo('select[name=cDistrict]'); } }); $("select[name=cDistrict]").change(function () { //區域 showBox('init'); $("select[name=cBookStore_ID]").find('option:not(:eq(0))').remove(); if ($("select[name=cDistrict]").val() !== "") { $('select[name=cStore_Temp] option[data-c=' + $("select[name=cCity]").val() + '][data-d=' + $("select[name=cDistrict]").val() + ']').clone().appendTo('select[name=cBookStore_ID]'); } }); $("select[name=cBookStore_ID]").change(function () { //門市 $(".ssAlert1, .ssAlert2").addClass("hide"); $("input[name=cStoreType]").val(""); if ($("select[name=cBookStore_ID]").val() !== '') { var st = $('select[name=cBookStore_ID] option:selected').data("t"); if (st == "I") { $(".ssAlert1").removeClass("hide"); } else if (st == "O") { $(".ssAlert2 .reserve-row__text").find("span").html($('select[name=cBookStore_ID] option:selected').data("r")); $(".ssAlert2").removeClass("hide"); } $("input[name=cStoreType]").val(st); $('html').addClass('loading'); $("input[name=mode]").val('A'); $.post("/api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { $('html').removeClass('loading'); if (data.status < 0) { swalz.fire(data.message, "", "error"); } else { tBox = data.objectz.timeBox; iBox = data.objectz.itemBox; doptions.startDate = data.objectz.startDay; doptions.endDate = data.objectz.endDay; doptions.datesDisabled = data.objectz.disDay.split(','); $("input[name=cReserve_Date]").datepicker('destroy').datepicker(doptions); showBox('branch'); } }, "json"); } else { } }); //if ($("select[name=cCity]").attr("data-d") !== null) { // $("select[name=cCity]").val($("select[name=cCity]").attr("data-d")).trigger('change'); //} //if ($("select[name=cDistrict]").attr("data-d") !== null) { // $("select[name=cDistrict]").val($("select[name=cDistrict]").attr("data-d")).trigger('change'); //} //if ($("select[name=cBookStore_ID]").attr("data-d") !== null) { // $("select[name=cBookStore_ID]").val($("select[name=cBookStore_ID]").attr("data-d")).trigger('change'); //} $("input[name=cReserve_Date]").attr('readonly', true).datepicker(doptions).on('changeDate', function (e) { var selDay = e.format(0, "yyyy/mm/dd"); var lstT = tBox.filter(function (el) { return el.cReserve_Date === selDay; }); //console.log(selDay); showBox('day'); if (lstT.length > 0) { //顥示服務項目 var lstI = iBox.filter(function (el) { return el.cSchedule_ID === lstT[0].cSchedule_ID; }); for (var ij = 0; ij < lstI.length; ij++) { $(".reserve-row__label[for='" + lstI[ij].cReserveItem_ID + "']").parent().removeClass('hide'); //console.log($("#" + lstI[ij].cReserveItem_ID).nextAll('span:first').text()); //console.log($("#" + lstI[ij].cReserveItem_ID).data('d').search(selDay)); if ($("#" + lstI[ij].cReserveItem_ID).data('x') == 1) { //僅允許的日期 if ($("#" + lstI[ij].cReserveItem_ID).data('o').length > 0) { //有預購設定 if ($("#" + lstI[ij].cReserveItem_ID).data('o').search(selDay) >= 0) { $("#" + lstI[ij].cReserveItem_ID).removeAttr('disabled').parent().next('input').removeAttr('disabled'); } else { $("#" + lstI[ij].cReserveItem_ID).attr('disabled', true).parent().next('input').attr('disabled', true); } } else { $("#" + lstI[ij].cReserveItem_ID).attr('disabled', true).parent().next('input').attr('disabled', true); } } else if ($("#" + lstI[ij].cReserveItem_ID).data('x') == 2) { //要排除的日期 if ($("#" + lstI[ij].cReserveItem_ID).data('d').length > 0) { if ($("#" + lstI[ij].cReserveItem_ID).data('d').search(selDay) >= 0) { //要排除的日期 //console.log('要排除的日期' + ij); $("#" + lstI[ij].cReserveItem_ID).attr('disabled', true); } else { $("#" + lstI[ij].cReserveItem_ID).removeAttr('disabled'); } } } if ($("input[name='cSchedule_Page']").val() == '2' && ij == 0) { $("#" + lstI[ij].cReserveItem_ID).trigger('click'); } } //放入時段 for (var ix = 0; ix < lstT.length; ix++) { var rdo = $('').attr({ "type": "radio", "id": lstT[ix].cReserveTime_ID, "name": "cReserveTime_ID", "value": lstT[ix].cReserveTime_ID, "required": true }); var lbl = $('').addClass(lstT[ix].reserveStatus).attr({ "for": lstT[ix].cReserveTime_ID }).append($('').addClass("time").text(lstT[ix].cReserve_Time)); if (parseFloat(lstT[ix].cReserve_Quota) - parseFloat(lstT[ix].reserveQty) <= 0) { lbl = $('').addClass("full").attr({ "for": lstT[ix].cReserve_Time }).append($('').addClass("time").text(lstT[ix].cReserve_Time)).append($('').addClass("full-text").text("(己額滿)")); } $(".reserve-row__range").append($('
').addClass("reserve-row__range__interval").append(rdo).append(lbl)); } } }); $("input[class='reserve-row__checkbox']").click(function () { var checkeds = $("input[name='cReserveItem_ID']:checked").map(function () { return $(this).val(); }).get(); if (checkeds.length >= 3) { $("#reserve-pop-alert").fadeIn(); $(this).prop("checked", false); } else { var v = $(this).val(); if ($(this).is(':checked')) { $("input[name='cbx" + v + "']").attr('required', true).focus(); } else { $("input[name='cbx" + v + "']").removeAttr('required'); } } }); //先檢查欄位, OK後發送驗證信 $("#fBtn").click(function (e) { if (!checkEmpty() || !checkFormat()) { e.preventDefault(); e.stopPropagation(); return false; } else { $('html').addClass('loading'); $("input[name=mode]").val('B'); $.post("/api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { $('html').removeClass('loading'); if (data.status < 0) { swalz.fire(data.message, "", "error"); } else { $("input[name=uo]").val(data.objectz); showBox('verify'); } }, "json"); } return false; }); $("#resend-email").click(function (e) { $("input[name=cVerification_Code]").removeAttr("required"); $("#fBtn").trigger('click'); return false; }); //送出先驗證再寫入 $("#eBtn").click(function (e) { if (!checkEmpty() || !checkFormat()) { e.preventDefault(); e.stopPropagation(); return false; } else { if (!$("input[name=agreement]").is(":checked")) { $("#reserve-pop-agreement").fadeIn(); return false; } else { $('html').addClass('loading'); $("input[name=mode]").val('E'); $.post("/api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { if (data.status < 0) { swalz.fire(data.message, "", "error"); $('html').removeClass('loading'); if (data.status < -90) { //驗證錯誤,可重送或重KEY showBox('error1'); } else { //寫入錯誤, 清掉驗證重設資料吧 showBox('error2'); } } else { $('html').removeClass('loading'); //$(".pop-contentx").empty().append(data.objectz); $(".pop-contentx").empty().append(data.objectz.frm); var sd = new Date(data.objectz.year, data.objectz.month - 1, data.objectz.day, data.objectz.hour, data.objectz.minute); var today = sd.toISOString(); resource = { "summary": data.objectz.title, "location": data.objectz.addr, "description": data.objectz.item, "start": { "dateTime": today, "TimeZone": "Asia/Taipei" }, "end": { "dateTime": today, "TimeZone": "Asia/Taipei" } }; showBox('success'); showBox('error2'); showBox('init'); //回復為重發驗證碼狀態 } }, "json"); } } return false; }); //計時器 var timer1 = $('.timer1').startTimer({ classNames: { hours: 'hide', minutes: 'hide', }, elementContainer: 'span', onComplete: function (e) { $("#resend-email").removeClass("hide"); $(".countdown-timer").addClass("hide"); //timer1.trigger('resume'); } }) //顥示畫面 function showBox(node) { if (node === 'branch') {//點選門市, 僅顥示日期 $("#dayBox").removeClass('hide'); $("#timeBox, #step2Box").addClass('hide'); } else if (node === 'day') { //顥示日期 $("#timeBox, #step2Box").removeClass('hide'); $(".reserve-row--checkbox").addClass('hide'); $(".reserve-row__range").empty(); //時段先清空 $("[type=text][name^='cbx'],[type=radio],[type=checkbox]").each(function (idx, element) { if ($(element).attr('type') === 'text') { $(element).val(''); } else { $(element).prop("checked", false); } }); } else if (node === 'verify') { //寄發驗證信 $("#fBtn, #resend-email").addClass('hide'); $("#eBtn").removeClass('disabled').removeClass('reserve-button--disable'); $("input[name=cVerification_Code]").attr("required", true); $('#verification-row, .countdown-timer').removeClass('hide');//.css({ 'display': 'flex' }); //$('#verification-status').addClass('reserve-row__verification__status--sending'); $("#reserve-pop-verification-sent").fadeIn(); timer1.trigger('start'); } else if (node === 'error1') { //驗證錯誤 } else if (node === 'error2') { //回報錯誤 $("input[name=cVerification_Code]").val('').removeAttr("required"); $("#verification-row").addClass('hide'); $("#fBtn").removeClass('hide'); $("#eBtn").addClass('disabled').addClass('reserve-button--disable'); } else if (node === 'success') { //己送出 $('#reserve-pop').fadeIn(); $('input,select,textarea').each(function (i, el) { if ($(el).attr('type') === 'checkbox' || $(el).attr('type') === 'radio') { $(el).prop("checked", false); } else { $(el).val(''); } }); } else if (node === 'init') { //原始狀態:僅留門市, 其餘清空且隱藏 $("#dayBox, #timeBox, #step2Box").addClass('hide'); $("[type=text]").val(''); } } } //查詢 if (id('sBtn')) { $("#sBtn").click(function (e) { var url = $(this).data("u"); if (!checkEmpty() || !checkFormat()) { e.preventDefault(); e.stopPropagation(); return false; } else { $('html').addClass('loading'); $("input[name=mode]").val('S'); $.post("/api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { if (data.status < 0) { $('html').removeClass('loading'); $("#reserve-pop-verification-failed").find(".reserve-pop__content__alert").text(data.message).end().fadeIn(); } else { location.replace(url); } }, "json"); } return false; }); } //取消 if (id('rBtn')) { $('.dot1').on('click', function () { $(this).toggleClass('selected'); $("input[name=uo]").val($(this).data('d')); $('#cancel-pop').fadeIn(); }); $('.dot2').on('click', function () { $(this).toggleClass('selected'); $('#cancel-pop2').fadeIn(); }); $('#nBtn').on('click', function () { $('#cancel-pop').fadeOut(); $('.cancel-dot').removeClass("selected"); $("input[name=uo]").val(''); return false; }); $('#n2Btn').on('click', function () { $('#cancel-pop2').fadeOut(); $('.cancel-dot').removeClass("selected"); $("input[name=uo]").val(''); return false; }); $("#rBtn").click(function (e) { $('html').addClass('loading'); $.post("api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { $('html').removeClass('loading'); if (data.status < 0) { swalz.fire(data.message, "", "error"); if (data.status === -99) { location.replace('reserve_search.aspx'); } else { $('#nBtn').trigger('click'); } } else { $('#cancel-pop').fadeOut(); swalz.fire({ title: "預約取消成功", icon: "success", timer: 3000, confirmButtonText: "OK" }).then(function (result) { window.location.href = 'reserve_list.aspx'; }); } }, "json"); return false; }); } if (id('iconV')) { $("#iconV").click(function () { $("#imgV").attr("src", "api/ajax_captcha.ashx?r=" + Math.random()); return false; }); } //門市管理取消 if (id('uBtn')) { $("#uBtn").click(function (e) { e.preventDefault(); $('html').addClass('loading'); $.post("api/ajax_reserve.ashx", $("#form1").serialize(), function (data) { if (data.status < 0) { swalz.fire(data.message, "", "error"); if (data.status === -99) { location.replace('baf331b3-0187-45df-8cda-1d5e2c46defa.aspx'); } } else { swalz.fire("修改成功", "", "success"); window.top.keyResend(); } }, "json"); return false; }); } //取消(登出) if (id('oBtn')) { $("#oBtn").click(function (e) { e.preventDefault(); var url = $(this).attr("data-u"); $('html').addClass('loading'); $.post("api/ajax_reserve.ashx", { mode: "O", uo: $("input[name=uo]").val() }, function (data) { if (data.status < 0) { swalz.fire(data.message, "", "error"); $('html').removeClass('loading'); } else { location.replace(url); } }, "json"); return false; }); } //關閉視窗 $('.reserve-pop__content__cancel').on('click', function () { $(".reserve-pop").fadeOut(); }); //檢查格式 function checkFormat() { var message = ''; obj = ''; $('input[data-validate],textarea[data-validate]').each(function (index, element) { // new RegExp('ab+c', 'i'); var regexp = new RegExp($(element).data('validate'), 'i'); if (element.name === 'cOrder_SN' && $(element).data('validate') === 'X') { regexp = new RegExp($('select[name=cChannel_ID] option:selected').data("g"), 'i'); } var value = $(element).val(); if (value !== '') { if (!regexp.test(value)) { message = fields[element.name] + '的格式不正確,請重新輸入'; obj = element.name; return false; } } }); if (message !== '') { $("[name=" + obj + "]").focus(); swalz.fire(message, "", "error"); message = ''; return false; } else { return true; } } //檢查未填的欄位 function checkEmpty() { var flag = true; var obj = '', message = ''; $('input[required]:not([type=radio]):not([type=checkbox]),select[required],textarea[required]').each(function (index, element) { if ($(element).val() === '') { if (element.tagName.toLowerCase() === 'select') { message = '請選擇' + fields[element.name]; } else { if (fields[element.name] === undefined) { message = '請填寫' + $(element).attr("placeholder"); } else { message = '請填寫' + fields[element.name]; } } obj = element.name; flag = false; return false; } }); if (flag) { $('[type=radio][required],[type=checkbox][required]').each(function (index, element) { var iptn = $(element).attr('type') === 'checkbox' ? '請勾選' : '請選擇'; var group = $(element).attr('name'); console.log(group); if ($('[name=' + group + ']:checked').length === 0) { //console.log(fields[group]); if (fields[group] === undefined) { message = iptn + ' [' + $(element).next().text() + ' ]'; } else { message = iptn + fields[group]; } obj = group; return false; } }); } if (message !== '') { $("[name=" + obj + "]").focus(); swalz.fire(message, "", "warning"); message = ''; return false; } else { return true; } } }); //----------------------------必備--------------------------------------------------------------------- function keyEsc() { var esc = $.Event("keydown", { keyCode: 27 }); $("body").trigger(esc); }; function keyResend() { if (id('hidelink')) { $("li.active").find('a.page-link').trigger('click'); } var esc = $.Event("keydown", { keyCode: 27 }); $("body").trigger(esc); }; function id(DOM) { return document.getElementById(DOM); } function getParam(name, dvalue) { var AllVars = window.location.search.substring(1); var Vars = AllVars.split("&"); for (i = 0; i < Vars.length; i++) { var Var = Vars[i].split("="); if (Var[0] === name) return Var[1]; } return dvalue; } function trims(s) { //return s.replace(/(^[\s]*)|([\s]*$)/g, ""); return s.replace(/\s+/g, ""); }