{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/vendors/anteater.validate.min.js","webpack:///./src/js/utils/util-extent.js","webpack:///./src/js/components/module/TestDriveCore.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/js/utils/device.js","webpack:///./src/js/utils/geo-info.js","webpack:///./src/js/components/module/LocationMap.js","webpack:///./src/js/components/module/LocationListItem.js","webpack:///./src/js/components/module/LocationViewer.js","webpack:///./src/js/pages/test-drive.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","64","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","e","anteater","g","f","split","h","k","isMobileNumber","b","test","isPhoneNumber","isEmail","isIdentityInTaiwan","a","parseInt","substr","toLowerCase","String","Validate","$","tmpl","pStr","pData","reg","str","keys","forEach","item","RegExp","replace","getQueryString","pKey","location","search","decodeURIComponent","initSetVCode","$img","attr","Math","round","random","setVCode","on","this","padLeft","lenght","toString","loadingView","setGA","id","undefined","dataLayer","event","event_userID","stringFormat","args","arguments","argument","getURLParameter","sParam","getParaFromUrl","address","parameter","decodeURI","sURLVariables","substring","sParameterName","verityInput","type","getSpecialTip","TIME_DATA","time","label","InstantCar","TestDriveCore","opt","extend","showMap","demoMode","cnyLimit","$main","$groupDatetime","find","loading","CRUrl","vaildUrl","submitUrl","Url","getExcludeData","isInstant","instantUrl","carlist","userData","isLogin","notice","html","delay","console","log","disabledDates","startDay","getNow","getHours","minDate","moment","add","isBetween","maxDate","each","index","el","val","format","datepicker","weekStart","startDate","endDate","maxViewMode","language","autoclose","defaultDate","Date","datesDisabled","currentTarget","addClass","removeClass","rsDATA","$complete","NAME","CARID","CAR","TIME","DATE","timeStr","LOCATION","checkedItemData","city","area","title","href","isMobile","EVENT_ICS","EVENT_LINK","target","onclick","getSelectedCarId","remove","empty","append","TheModel","scrollTop","$obj","message","isVaild","setCustomValidity","reportValidity","ajax","url","dataType","cache","done","RS","excludeData","DATA","setExcludeNoticeWords","NOTICE","ready","fail","always","self","change","onAddressChange","locationViewer","LocationViewer","isScrollListByMarker","isListItemCheckable","initDateSel","getDisabledDates","updateVCode","initDateTime","initInstTime","hide","show","baseURL","$emgGroup","engs","element","indexOf","prop","first","carid","trigger","checkLogin","initDateHide","instdata","careng","cartxt","text","carname","qrydate","dlrcd","brnhcd","dlrbrn","getInstTimes","loc","onClickQuery","onSubmit","onVail","showCNYLimitAlert","update","checkTDV","initVaild","keyup","maxLength","next","focus","isSetFocus","tomorrow","dates","timeData","tmplHtml","option","VALUE","LABEL","pathNames","$carType","setCarType","filter","excludeCities","store","targetStores","updateFilter","preventDefault","$serviceTestDrive","$serviceConsultation","choicServiceTestDrive","choicServiceConsultation","TPY","Number","vaildity","GENDER","ENG","ENGString","EMAIL","TEL","CONTACT_TIME","isVaildity","rsvstdt","hdbrnhcd","rsvendt","filteredCarList","car","CARHDBRNHCD","carSel","engno","CAREGNO","iseq","CARISEQ","cardlrcd","CARDLRCD","DATE2","TIME2","DATE3","TIME3","LOC","sales","EDM","EVENT","vail","setTimeout","LIST_ITEM_CHECK","submidata","timeInterval","alert","ERROR","LOGINURL","phoneCode","trim","timer","clearInterval","addPostRsv","submit","eventLabel","event_car","event_label","event_engine","fancybox","close","LICSNO","vcode","DSPRESULT","setMinutes","getMinutes","endTime","getTime","setInterval","nowTime","offsetTime","min","sec","$tip","CARTIME","BRANCH","ENDTIME","list","newHtml","CarTime","Branch","UserETime","UserSTime","carList","addInstTime","timeList","ReturnCode","ReturnMsg","ReturnData","isSuccess","Webusrid","WEBUSRID","seqno","map","webpackContext","req","webpackContextResolve","Error","code","resolve","hasTouch","navigator","userAgent","getUserGeo","Promise","reject","geolocation","getCurrentPosition","position","error","google","LocationMap","dom","listDict","markerDict","infoWindow","maps","InfoWindow","defOpt","center","lat","lng","zoom","mapTypeControl","zoomControl","streetViewControl","Map","addMarkers","ICON_URL","scaledSize","Size","linkQ","addr","lat1","lon1","lat2","lon2","deg2rad","PI","dLat","dLon","sin","cos","atan2","sqrt","marker","icon","getIcon","Marker","visible","addListener","onMarkerClick","setVisible","showInfoWindow","emit","MARKER_CLICK","$item","chargerCount","pricing","payment","tel","aed","exclusive","content","getContent","getDirectionLink","setContent","open","bounds","LatLngBounds","lastMatchKey","isMatch","markerVisibleCount","getPosition","fitBounds","panByMarkerKey","setOptions","panTo","setZoom","tolat","tolng","currentPosition","EventEmitter","LocationListItem","$container","isCheckable","weekday","Array","initWeekName","layoutWeekhtml","getNowTimeStatus","getNowTimeString","markerItemshtml","exclusiveCars","dateInfo","TYP","join","dist","isViewMarkerItems","CHECK","onInfoClick","timeSpan","timeNow","timeSplit","start","stop","now","weekName","timeString","active","CLICK","offsetDay","setDate","getDate","getDay","shiftIndex","isSunDay","SDISFLAG","checkTimeStatue","SDTIME","Wflags","ODTIME","day","isGetOtherDay","getNextTimeString","getWeekName","weekhtml","weekHtmlTemplate","HDISFLAG","HDTIME","ebisflag","ntisflag","bpisflag","carHeightType","limitHeight","useGPS","iconUrl","isMaxnervaLog","locationType","$city","$area","$keyword","$listW","$scrollInfoDom","$listContent","listShowed","currentList","updateMapDelayer","currentFilter","items","summary","backProp","islinkDirect","hasClass","openList","updateMap","onLoadList","loadList","directType","keyword","backup","listBackup","list2","CITY","newList","makeCityOption","resetCityOption","cityOption","updateNewMarkers","onCityChange","isInit","TYPE","adjData","initMap","initCityFilter","parseFloat","LAT","LNG","isNaN","KEY","DEALER","TITLE","dealer","AREA","ADDR","AED","EXCLUSIVE","EBISFLAG","NTISFLAG","BPISFLAG","DATEINFO","EXCLUSIVECARS","CARHEIGHTTYPE","LIMITHEIGHT","$map","onAreaChange","concat","areas","selectedIndex","cb","onGetCurrentPosition","coords","latitude","longitude","getDistance","directionLink","clearTimeout","updateMapDelay","q","sendMaxnervaLog","CurrentPosition","sort","dynamicSort","updateMapMarkers","updateList","updateSummary","updateVisibleMarkers","onListItemClick","onListItemCheck","currentTypeName","optiontypeName","scrollListByKey","top","offset","animate","onKeywordSubmit","KEYWORD","argProperty","sortOrder","document"],"mappings":"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","file":"js/testDrive.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t64: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([681,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","(function(d){var e=function(){var d=/^\\d{10}$/,e=/^[0-9]{6,10}$/,g=/[A-Za-z]{1}[0-9]{9}/,f=\"abcdefghjklmnpqrstuvxywzio\".split(\"\"),h=[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],k=/^([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4})$/;return{isMobileNumber:function(b){return d.test(b)},isPhoneNumber:function(b){return e.test(b)},isEmail:function(b){return k.test(b)},isIdentityInTaiwan:function(b){if(10!=b.length||0==g.test(b))return!1;for(var c=b.split(\"\"),a=1;a hello ash!\r\n *\r\n * @param {any} str\r\n * @param {any} data\r\n * @returns\r\n */\r\nexport function tmpl(pStr, pData) {\r\n let reg;\r\n let str = pStr;\r\n Object.keys(pData).forEach((item) => {\r\n reg = new RegExp(`{{ ${item} }}`, 'g');\r\n str = str.replace(reg, pData[item]);\r\n });\r\n return str;\r\n}\r\nexport function getQueryString(pKey) {\r\n const a = window.location.search.substr(1).split('&');\r\n const b = {};\r\n for (let i = 0; i < a.length; i += 1) {\r\n const p = a[i].split('=');\r\n if (p.length === 2) {\r\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, ' '));\r\n }\r\n }\r\n return b[pKey];\r\n}\r\n\r\nfunction initSetVCode($img) {\r\n $img.attr('src', `api/vcode.ashx?rnd=${Math.round(Math.random() * 999999)}`);\r\n}\r\n\r\nexport function setVCode($img) {\r\n initSetVCode($img);\r\n $img.on('click', function click() {\r\n initSetVCode($(this));\r\n });\r\n}\r\n\r\nexport function padLeft(str, lenght) {\r\n if (str.toString().length >= lenght) {\r\n return str;\r\n }\r\n return padLeft(`0${str}`, lenght);\r\n}\r\n\r\n// loading樣式\r\nexport function loadingView() {\r\n return '
'\r\n + '
Loading...
'\r\n + '
';\r\n}\r\n\r\nexport function setGA(id) {\r\n if (window.dataLayer !== undefined) {\r\n window.dataLayer.push({\r\n event: 'userID',\r\n event_userID: id,\r\n });\r\n }\r\n}\r\n\r\n// eslint-disable-next-line no-extend-native\r\nexport function stringFormat(args) {\r\n let result = this;\r\n if (arguments.length > 0) {\r\n if (arguments.length === 1 && typeof args === 'object') {\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const key in args) {\r\n if (args[key] !== undefined) {\r\n const reg = new RegExp(`({${key}})`, 'g');\r\n result = result.replace(reg, args[key]);\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < arguments.length; i += 1) {\r\n // eslint-disable-next-line prefer-rest-params\r\n const argument = arguments[i];\r\n if (argument !== undefined) {\r\n const reg = new RegExp(`({[${i}]})`, 'g');\r\n result = result.replace(reg, argument);\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function getURLParameter(sParam) {\r\n const getParaFromUrl = $.address.parameter(sParam);\r\n if (getParaFromUrl !== '' && getParaFromUrl !== undefined) {\r\n return decodeURI(getParaFromUrl);\r\n }\r\n const sPageURL = window.location.search.substring(1);\r\n const sURLVariables = sPageURL.split('&');\r\n for (let i = 0; i < sURLVariables.length; i += 1) {\r\n const sParameterName = sURLVariables[i].split('=');\r\n if (sParameterName[0] === sParam) {\r\n return decodeURI(sParameterName[1]);\r\n }\r\n }\r\n return '';\r\n}\r\n/**\r\n *\r\n * @param {*} str value\r\n * @param {*} type 'num' 'engnum' 'mail' 'mobile' 'htmltag'\r\n * @returns\r\n */\r\nexport function verityInput(str, type) {\r\n const regNum = /^[0-9]+$/;\r\n const regEngNum = /^[A-Za-z0-9]+$/;\r\n const regex = /[\"><`"‵<>]$/g;\r\n switch (type) {\r\n case 'num':\r\n return regNum.test(str);\r\n case 'engnum':\r\n return regEngNum.test(str);\r\n case 'mail':\r\n return window.anteater.Validate.isEmail(str);\r\n case 'mobile':\r\n return window.anteater.Validate.isMobileNumber(str);\r\n case 'htmltag':\r\n return !regex.test(str);\r\n default:\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * verityInput regex\r\n * @returns\r\n */\r\nexport function getSpecialTip() {\r\n const reg = '\"><`"‵<>';\r\n return `請勿輸入特殊符號!${reg}`;\r\n}\r\n\r\nexport default {\r\n tmpl,\r\n getQueryString,\r\n setVCode,\r\n padLeft,\r\n loadingView,\r\n setGA,\r\n stringFormat,\r\n getURLParameter,\r\n verityInput,\r\n getSpecialTip,\r\n};\r\n","/* eslint-disable no-alert */\r\n// require('asset/lib/anteater/util/anteater.validate.min.js');\r\nimport {\r\n tmpl, getQueryString, setVCode, verityInput,\r\n} from '@/utils/util-extent';\r\n// const DateSelector = require('../util/DateSelector.js');\r\nimport LocationViewer from '@/components/module/LocationViewer';\r\n// const CarSelector = require('../calculator/CarSelector.js');\r\n// const carSelector = new CarSelector(false);\r\nimport { isMobile } from '@/utils/device';\r\nimport moment from 'moment';\r\n\r\nconst { $, location } = window;\r\n\r\n// const ONE_DAY = 1000 * 60 * 60 * 24;\r\n// const ONE_HOUR = 1000 * 60 * 60;\r\nconst TIME_DATA = [\r\n {\r\n value: '',\r\n time: '-1',\r\n label: '請選擇時段',\r\n },\r\n {\r\n value: '0',\r\n time: '8',\r\n label: '08:00 ~ 10:00',\r\n },\r\n {\r\n value: '1',\r\n time: '10',\r\n label: '10:00 ~ 12:00',\r\n },\r\n {\r\n value: '2',\r\n time: '12',\r\n label: '12:00 ~ 14:00',\r\n },\r\n {\r\n value: '3',\r\n time: '14',\r\n label: '14:00 ~ 16:00',\r\n },\r\n];\r\n// 即刻預約試乘車種\r\nconst InstantCar = ['RAV4', 'COROLLA_CROSS', 'ALTIS', 'YARISCROSS'];\r\n\r\nexport default class TestDriveCore {\r\n constructor(opt = {}) {\r\n this.opt = $.extend({\r\n showMap: true,\r\n demoMode: false,\r\n cnyLimit: true,\r\n }, opt);\r\n this.$main = $('.main-wrapper');\r\n this.$groupDatetime = this.$main.find('#groupDatetime');\r\n this.loading = false;\r\n this.CRUrl = 'api/testdrive_sales.ashx';\r\n this.vaildUrl = 'api/testdrive_vaild.ashx';\r\n this.submitUrl = 'api/testdrive_submit.ashx';\r\n this.Url = 'api/testdrive_sales.ashx';\r\n this.getExcludeData();\r\n this.isInstant = false;\r\n this.instantUrl = 'api/testdrive_instantTime.ashx';\r\n this.carlist = [];\r\n this.userData = [];\r\n this.isLogin = false;\r\n }\r\n\r\n getExcludeData() {\r\n $.ajax({\r\n url: 'api/testdrive_expcars.ashx',\r\n type: 'GET',\r\n dataType: 'json',\r\n cache: 'false',\r\n })\r\n .done((e) => {\r\n if (e.RS === 'OK') {\r\n this.excludeData = e.DATA;\r\n TestDriveCore.setExcludeNoticeWords(e.NOTICE);\r\n this.ready();\r\n } else {\r\n console.log(e.RS);\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n })\r\n .always(() => {\r\n // console.log('complete');\r\n });\r\n }\r\n\r\n // todo\r\n static setExcludeNoticeWords(notice) {\r\n $('.testdrive-content .notice .exclude').html(notice);\r\n }\r\n\r\n ready() {\r\n const self = this;\r\n $.address.change(this.onAddressChange.bind(this));\r\n this.locationViewer = new LocationViewer('1', this.$main, {\r\n isScrollListByMarker: true,\r\n isListItemCheckable: true,\r\n showMap: this.opt.showMap,\r\n });\r\n\r\n TestDriveCore.initDateSel(this.getDisabledDates());\r\n\r\n this.updateVCode();\r\n\r\n this.initDateTime();\r\n this.initInstTime();\r\n\r\n // 是否需要業務事件\r\n this.$main.find('input[name=isCarOwner]').on('click', (e) => {\r\n const ishide = $(e.target).val() === 'false';\r\n if (ishide) {\r\n this.$main.find('#crRow').hide();\r\n } else {\r\n this.$main.find('#crRow').show();\r\n }\r\n });\r\n this.$main.find('#crRow').hide();\r\n\r\n // 引擎顯示並確認驗證\r\n this.$main.find('#testDriveCar').on('change', function change() {\r\n if ($(this).val() !== null && $(this).val() !== '') {\r\n location.replace(`${$.address.baseURL()}#/${$(this).val()}`);\r\n self.locationViewer.checkedItemData = null;\r\n // eng\r\n const $emgGroup = $('#carEngs');\r\n $emgGroup.show();\r\n const engs = $(this).find(':selected').data('eng').toString()\r\n .split(',');\r\n $emgGroup.find('.custom-radio').each((index, element) => {\r\n const value = $(element).find('input').val().toString();\r\n if (engs.indexOf(value) > -1) {\r\n $(element).show();\r\n } else {\r\n $(element).hide();\r\n $(element).find('input').get(0).setCustomValidity(''); // 隱藏則移除驗證\r\n }\r\n });\r\n $emgGroup.find('input').prop('checked', false);\r\n self.$main.find('input[name=careng]:visible').first().prop('checked', true);\r\n }\r\n });\r\n\r\n // 選擇服務項目\r\n this.$main.find('#serviceTestDrive').on('change', function change() {\r\n const carid = self.getSelectedCarId();\r\n // console.log(carid);\r\n if ($(this).prop('checked')) {\r\n // 是否為即刻試乘車種\r\n if (InstantCar.indexOf(carid) > -1) {\r\n self.isInstant = true;\r\n self.$main.find('#groupDatetime').hide();\r\n self.$main.find('#instantDatetime').show();\r\n if (!self.isLogin) {\r\n self.checkLogin();\r\n } else {\r\n $('#inputInstDate').trigger('change');\r\n }\r\n } else {\r\n self.isInstant = false;\r\n self.$main.find('#groupDatetime').show();\r\n self.$main.find('#instantDatetime').hide();\r\n }\r\n } else {\r\n self.initDateHide();\r\n }\r\n });\r\n\r\n // 選擇試乘據點\r\n $('#store-list').on('change', 'input[type=radio]', (e) => {\r\n if (self.isInstant) {\r\n // 即時試乘\r\n const instdata = {};\r\n let careng = '';\r\n if ($('input[name=careng]:checked').val() === '10') {\r\n careng = 'HYBRID';\r\n }\r\n const $obj = this.$main.find('#testDriveCar');\r\n const cartxt = $obj.find(':selected').text().toString();\r\n instdata.carname = `${cartxt} ${careng}`;\r\n instdata.qrydate = self.$main.find('#inputInstDate').val().replace(/-/g, '');\r\n instdata.dlrcd = $(e.target).val().substr(0, 1);\r\n instdata.brnhcd = $(e.target).val().substr(1, 2);\r\n instdata.dlrbrn = $(e.target).val();\r\n // console.log(instdata);\r\n this.getInstTimes(instdata);\r\n }\r\n });\r\n\r\n // 即時試乘-選擇期望試乘時間\r\n this.$main.find('#inputInstDate').on('change', (e) => {\r\n const itemData = self.locationViewer.checkedItemData;\r\n if (!itemData) {\r\n const chooseStoreElement = this.$main.find('[name=\"chooseStore\"]');\r\n // 判斷據點清單是否存在\r\n if (chooseStoreElement.length) {\r\n this.$main.find('[name=\"chooseStore\"]').get(0).setCustomValidity('請選擇試乘據點');\r\n this.$main.find('[name=\"chooseStore\"]').get(0).reportValidity();\r\n console.log('請選擇試乘據點');\r\n } else {\r\n // search-filter-city\r\n this.$main.find('.search-filter-city select').get(0).setCustomValidity('請搜尋試乘或諮詢據點並選擇據點');\r\n this.$main.find('.search-filter-city select').get(0).reportValidity();\r\n console.log('請搜尋試乘或諮詢據點並選擇據點');\r\n }\r\n return;\r\n }\r\n this.$main.find('[name=\"chooseStore\"]').get(0).setCustomValidity('');\r\n const loc = self.locationViewer.checkedItemData.key;\r\n if (self.isInstant) {\r\n const instdata = {};\r\n let careng = '';\r\n if ($('input[name=careng]:checked').val() === '10') {\r\n careng = 'HYBRID';\r\n }\r\n const $obj = this.$main.find('#testDriveCar');\r\n const cartxt = $obj.find(':selected').text().toString();\r\n instdata.carname = `${cartxt} ${careng}`;\r\n instdata.qrydate = $(e.target).val().replace(/-/g, '');\r\n instdata.dlrcd = loc.substr(0, 1);\r\n instdata.brnhcd = loc.substr(1, 2);\r\n instdata.dlrbrn = loc;\r\n console.log(instdata);\r\n this.getInstTimes(instdata);\r\n }\r\n });\r\n\r\n this.$main.find('#instantDatetime').hide();\r\n this.$main.find('#groupDatetime').hide();\r\n this.$main.find('#carEngs').hide();\r\n\r\n // this.$main.find('#crRow input, #crRow button').prop('disabled', true);\r\n\r\n this.$main.find('#crResult').hide();\r\n // 查詢業務\r\n this.$main.find('#recaptcha-query').on('click', this.onClickQuery.bind(this));\r\n this.$main.find('#recaptcha-reload').on('click', this.updateVCode.bind(this));\r\n // 送出\r\n this.$main.find('#testDriveForm').on('submit', this.onSubmit.bind(this));\r\n $('#vailForm #submitBtn').on('click', this.onVail.bind(this));\r\n // 請專人聯繫\r\n $('#errMsgContact').on('click', () => {\r\n self.isInstant = false;\r\n self.$main.find('#groupDatetime').show();\r\n self.$main.find('#instantDatetime').hide();\r\n $('#errMsgClose').trigger('click');\r\n });\r\n // 重新選擇\r\n $('#errMsgReselect').on('click', () => {\r\n self.isInstant = true;\r\n $('#errMsgClose').trigger('click');\r\n });\r\n\r\n\r\n if (this.opt.cnyLimit) TestDriveCore.showCNYLimitAlert();\r\n $.address.update();\r\n this.$main.find('#testDriveCar').trigger('change');\r\n // this.$main.find('#instantDatetime select').trigger('click');\r\n self.checkTDV();\r\n this.initVaild();\r\n\r\n // 輸入驗證碼跳位置\r\n $('.form-verification-code').keyup(function key() {\r\n if (this.value.length === this.maxLength) {\r\n $(this).next('input').focus();\r\n }\r\n });\r\n }\r\n\r\n static showCNYLimitAlert(delay = 500) {\r\n console.log(delay);\r\n // setTimeout(() => {\r\n // alert('因應春節期間人員休假,目前暫不開放1/22~1/30的預約時段,如您於春節期間預約試乘,1/31起將有專人與您聯繫,確認預約事宜。造成不便敬請見諒。');\r\n // }, delay);\r\n }\r\n\r\n updateVCode(isSetFocus = false) {\r\n this.$main.find('#recaptcha').val('');\r\n setVCode(this.$main.find('#recaptcha-img'));\r\n if (isSetFocus) this.$main.find('#recaptcha').focus();\r\n }\r\n\r\n // 排除日期\r\n getDisabledDates() {\r\n if (this.opt.cnyLimit) {\r\n // 過年\r\n let tomorrow = new Date();\r\n const dates = [];\r\n for (let index = 0; index < 7; index += 1) {\r\n tomorrow = moment('2024-02-08').add(index, 'days');\r\n dates.push(tomorrow.format('YYYY-MM-DD'));\r\n }\r\n return dates;\r\n }\r\n return [];\r\n }\r\n\r\n static initDateSel(disabledDates) {\r\n const now = TestDriveCore.getNow();\r\n // 所有車款預約時間皆改為N+2;但如果下午6點後預約則是N+3。\r\n // EX: 11/15 10:00預約,提供11/17試乘選擇。11/15 18:00後預約,提供11/18試乘選擇。\r\n const maxHr = 18;\r\n const startDay = (now.getHours() < maxHr) ? 2 : 3;\r\n // 需判斷不在時間內 過年 2023/1/19 ~ 2023/1/30\r\n let minDate = moment().add(startDay, 'days');\r\n if (minDate.isBetween('2024-02-08', '2024-02-14')) {\r\n minDate = moment('2024-02-15');\r\n }\r\n const maxDate = moment().add(21, 'days');\r\n\r\n const dates = $('.js-test-drive-date');\r\n\r\n dates.each((index, el) => {\r\n $(el).val(minDate.format('YYYY-MM-DD'));\r\n\r\n $(el).datepicker({\r\n format: 'yyyy-mm-dd',\r\n weekStart: 0,\r\n startDate: minDate.format('YYYY-MM-DD'),\r\n endDate: maxDate.format('YYYY-MM-DD'),\r\n maxViewMode: 2,\r\n language: 'zh-TW',\r\n autoclose: true,\r\n defaultDate: new Date(),\r\n datesDisabled: disabledDates,\r\n })\r\n .on('show', (event) => {\r\n const target = $(event.currentTarget);\r\n target.addClass('focused');\r\n })\r\n .on('hide', (event) => {\r\n const target = $(event.currentTarget);\r\n target.removeClass('focused');\r\n });\r\n\r\n $(el).addClass('form-control-date');\r\n\r\n $(el).on('click', () => {\r\n $(el).datepicker('show');\r\n });\r\n });\r\n }\r\n\r\n initDateTime() {\r\n this.$groupDatetime.find('select').empty();\r\n for (let i = 0; i < TIME_DATA.length; i += 1) {\r\n const timeData = TIME_DATA[i];\r\n const tmplHtml = (timeData.value === '-1') ? '' : '\"';\r\n const option = tmpl(tmplHtml, {\r\n VALUE: timeData.value,\r\n LABEL: timeData.label,\r\n });\r\n this.$groupDatetime.find('select').append(option);\r\n }\r\n }\r\n\r\n setCarType() {\r\n const carid = $.address.pathNames()[0];\r\n const $carType = this.$main.find('#testDriveCar');\r\n if (carid && carid !== '') {\r\n $carType.val(carid);\r\n }\r\n }\r\n\r\n getSelectedCarId() {\r\n const $carType = this.$main.find('#testDriveCar');\r\n if ($carType.val() !== '') {\r\n return $carType.val();\r\n }\r\n return $.address.pathNames()[0];\r\n }\r\n\r\n // 選車後篩據點 by MarkVann\r\n onAddressChange() {\r\n this.setCarType();\r\n const carid = this.getSelectedCarId();\r\n const [data] = this.excludeData.filter(({ id }) => (id === carid));\r\n if (!data) this.locationViewer.updateFilter();\r\n else if (data.city) this.locationViewer.excludeCities(data.city);\r\n else if (data.store) this.locationViewer.targetStores(data.store);\r\n }\r\n\r\n onSubmit(e) {\r\n if (e) e.preventDefault();\r\n\r\n // gaev('btn', 'click', 'btn_testdrive_ok');\r\n\r\n const data = {};\r\n const $serviceTestDrive = this.$main.find('#serviceTestDrive');\r\n const $serviceConsultation = this.$main.find('#serviceConsultation');\r\n if (!$serviceTestDrive.prop('checked') && !$serviceConsultation.prop('checked')) {\r\n if ($serviceTestDrive.prop('disabled')) {\r\n $serviceConsultation.get(0).setCustomValidity('請選擇服務項目');\r\n $serviceConsultation.get(0).reportValidity();\r\n } else {\r\n $serviceTestDrive.get(0).setCustomValidity('請選擇服務項目');\r\n $serviceTestDrive.get(0).reportValidity();\r\n }\r\n\r\n return;\r\n }\r\n $serviceTestDrive.get(0).setCustomValidity('');\r\n $serviceConsultation.get(0).setCustomValidity('');\r\n\r\n const choicServiceTestDrive = this.$main.find('#serviceTestDrive').prop('checked') ? this.$main.find('#serviceTestDrive').val() : 0;\r\n const choicServiceConsultation = this.$main.find('#serviceConsultation').prop('checked') ? this.$main.find('#serviceConsultation').val() : 0;\r\n data.TPY = Number.parseInt(choicServiceTestDrive, 10) + Number.parseInt(choicServiceConsultation, 10);\r\n\r\n data.CAR = this.getSelectedCarId();\r\n\r\n if (!TestDriveCore.vaildity(this.$main.find('#testDriveCar'), '請選擇試乘車款')) {\r\n console.log('請選擇試乘車款');\r\n return;\r\n }\r\n\r\n data.NAME = $('#inputName').val();\r\n\r\n if (!TestDriveCore.vaildity(this.$main.find('#inputName'), '請輸入中英文!', verityInput(data.NAME, 'htmltag') === false)) {\r\n console.log('請輸入中英文!');\r\n return;\r\n }\r\n\r\n if (this.$main.find('input[name=inputGender]:checked').length === 0) {\r\n this.$main.find('input[name=inputGender]').get(0).setCustomValidity('請選擇性別');\r\n this.$main.find('input[name=inputGender]').get(0).reportValidity();\r\n console.log('請選擇性別');\r\n return;\r\n }\r\n this.$main.find('input[name=inputGender]').get(0).setCustomValidity('');\r\n\r\n data.GENDER = $('input[name=inputGender]:checked').val();\r\n\r\n if (this.$main.find('input[name=careng]:checked').length === 0) {\r\n this.$main.find('input[name=careng]:visible').get(0).setCustomValidity('請選擇引擎');\r\n this.$main.find('input[name=careng]:visible').get(0).reportValidity();\r\n console.log('請選擇引擎');\r\n return;\r\n }\r\n this.$main.find('input[name=careng]').each((index, element) => {\r\n element.setCustomValidity('');\r\n });\r\n\r\n data.ENG = $('input[name=careng]:checked').val();\r\n data.ENGString = $(`label[for=${$('input[name=careng]:checked').attr('id')}]`).text();\r\n\r\n data.EMAIL = $('#inputEmail').val();\r\n\r\n if (!TestDriveCore.vaildity(this.$main.find('#inputEmail'), '無效的Email')) {\r\n console.log('無效的Email');\r\n return;\r\n }\r\n\r\n data.TEL = $('#inputPhone').val();\r\n\r\n if (!TestDriveCore.vaildity(this.$main.find('#inputPhone'), '請輸入完整電話!', verityInput(data.TEL, 'num') === false)) {\r\n console.log('請輸入電話');\r\n return;\r\n }\r\n\r\n if (this.$main.find('input[name=inputContactTime]:checked').length === 0) {\r\n this.$main.find('input[name=inputContactTime]').get(0).setCustomValidity('請選擇聯絡時間');\r\n this.$main.find('input[name=inputContactTime]').get(0).reportValidity();\r\n console.log('請選擇聯絡時間');\r\n return;\r\n }\r\n this.$main.find('input[name=inputContactTime]').get(0).setCustomValidity('');\r\n data.CONTACT_TIME = $('input[name=inputContactTime]:checked').val();\r\n console.log(`聯絡時間:${$('input[name=inputContactTime]:checked').val()}`);\r\n\r\n if (this.$main.find('#serviceTestDrive').prop('checked')) {\r\n let isVaildity = false;\r\n if (this.isInstant) {\r\n this.$main.find('#instantDatetime input').each((i, element) => {\r\n if (!TestDriveCore.vaildity($(element), '請選擇期望日期')) {\r\n isVaildity = true;\r\n }\r\n });\r\n this.$main.find('#instantDatetime select').each((i, element) => {\r\n if (!TestDriveCore.vaildity($(element), '請選擇期望時間')) {\r\n isVaildity = true;\r\n }\r\n });\r\n if (isVaildity) {\r\n console.log('請選擇期望時間');\r\n return;\r\n }\r\n data.isInstant = 'T';\r\n data.DATE = this.$main.find('#inputInstDate').val();\r\n data.TIME = this.$main.find('#selectInstTime').val();\r\n data.rsvstdt = $('#selectInstTime').find(':selected').data('cartime').toString();\r\n data.hdbrnhcd = $('#selectInstTime').find(':selected').data('branch').toString();\r\n data.rsvendt = $('#selectInstTime').find(':selected').data('endtime').toString();\r\n const filteredCarList = this.carlist.filter((car) => car.CARHDBRNHCD === data.hdbrnhcd);\r\n // console.log(filteredCarList);\r\n if (filteredCarList.length >= 1) {\r\n const carSel = filteredCarList[0];\r\n data.engno = carSel.CAREGNO;\r\n data.iseq = carSel.CARISEQ;\r\n data.cardlrcd = carSel.CARDLRCD;\r\n }\r\n // data.custid = this.userData.custid;\r\n // data.custName = this.userData.custName;\r\n // data.custMobile = this.userData.custMobile;\r\n // data.custsex = this.userData.custsex;\r\n // data.custemail = this.userData.custemail;\r\n } else {\r\n this.$main.find('#groupDatetime input').each((i, element) => {\r\n if (!TestDriveCore.vaildity($(element), '請選擇期望日期')) {\r\n isVaildity = true;\r\n }\r\n });\r\n this.$main.find('#groupDatetime select').each((i, element) => {\r\n if (!TestDriveCore.vaildity($(element), '請選擇期望時間')) {\r\n isVaildity = true;\r\n }\r\n });\r\n if (isVaildity) {\r\n console.log('請選擇期望時間');\r\n return;\r\n }\r\n data.isInstant = 'F';\r\n data.DATE = this.$main.find('#inputDate1').val();\r\n data.TIME = this.$main.find('#selectTime1').val();\r\n data.DATE2 = this.$main.find('#inputDate2').val();\r\n data.TIME2 = this.$main.find('#selectTime2').val();\r\n data.DATE3 = this.$main.find('#inputDate3').val();\r\n data.TIME3 = this.$main.find('#selectTime3').val();\r\n }\r\n }\r\n\r\n if (this.$main.find('[name=\"chooseStore\"]').length === 0) {\r\n // search-filter-city\r\n this.$main.find('.search-filter-city select').get(0).setCustomValidity('請搜尋試乘或諮詢據點並選擇據點');\r\n this.$main.find('.search-filter-city select').get(0).reportValidity();\r\n console.log('請搜尋試乘或諮詢據點並選擇據點');\r\n return;\r\n }\r\n\r\n this.$main.find('.search-filter-city select').get(0).setCustomValidity('');\r\n data.checkedItemData = this.locationViewer.checkedItemData;\r\n if (!data.checkedItemData) {\r\n //\r\n this.$main.find('[name=\"chooseStore\"]').get(0).setCustomValidity('請選擇試乘據點');\r\n this.$main.find('[name=\"chooseStore\"]').get(0).reportValidity();\r\n console.log('請選擇試乘據點');\r\n return;\r\n }\r\n this.$main.find('[name=\"chooseStore\"]').get(0).setCustomValidity('');\r\n\r\n data.LOC = data.checkedItemData.key;\r\n\r\n\r\n if (this.$main.find('input[name=useFormerSalesman]:checked').val() === true) {\r\n data.sales = this.$main.find('#dspresult').text();\r\n }\r\n\r\n if (!$('#agreeTerms').prop('checked')) {\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('請先閱讀並同意試乘條款');\r\n this.$main.find('[type=\"submit\"]').get(0).reportValidity();\r\n console.log('請先閱讀並同意試乘條款');\r\n return;\r\n }\r\n\r\n if (!$('#agreePrivacy').prop('checked')) {\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('請先閱讀並同意TOYOTA官網隱私權條款');\r\n this.$main.find('[type=\"submit\"]').get(0).reportValidity();\r\n console.log('請先閱讀並同意TOYOTA官網隱私權條款');\r\n return;\r\n }\r\n\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('');\r\n\r\n data.EDM = '0'; // $('#agreeTerms').prop('checked') ? '1' : '0';\r\n\r\n if (getQueryString('event')) {\r\n data.EVENT = getQueryString('event');\r\n }\r\n\r\n // 需簡訊驗證\r\n this.vail(data);\r\n $('#labPhone').text(data.TEL);\r\n // return false;\r\n }\r\n\r\n initVaild() {\r\n const self = this;\r\n this.$main.find('#serviceTestDrive,#serviceConsultation').on('change', () => {\r\n const $serviceTestDrive = this.$main.find('#serviceTestDrive');\r\n const $serviceConsultation = this.$main.find('#serviceConsultation');\r\n if (!$serviceTestDrive.prop('checked') && !$serviceConsultation.prop('checked')) {\r\n if ($serviceTestDrive.prop('disabled')) {\r\n $serviceConsultation.get(0).setCustomValidity('請選擇服務項目');\r\n $serviceConsultation.get(0).reportValidity();\r\n } else {\r\n $serviceTestDrive.get(0).setCustomValidity('請選擇服務項目');\r\n $serviceTestDrive.get(0).reportValidity();\r\n }\r\n } else {\r\n $serviceTestDrive.get(0).setCustomValidity('');\r\n $serviceConsultation.get(0).setCustomValidity('');\r\n }\r\n });\r\n\r\n this.$main.find('#testDriveCar').on('change', () => {\r\n // 利用延遲才有辦法產生效果\r\n setTimeout(() => {\r\n if (!TestDriveCore.vaildity(self.$main.find('#testDriveCar'), '請選擇試乘車款')) {\r\n console.log('請選擇試乘車款');\r\n return;\r\n }\r\n self.checkTDV();\r\n }, 500);\r\n });\r\n\r\n this.$main.find('input[name=careng]').on('change', function change() {\r\n $(this).get(0).setCustomValidity('');\r\n });\r\n\r\n this.$main.find('#inputName').on('change', function change() {\r\n TestDriveCore.vaildity($(this), '請輸入姓名');\r\n });\r\n\r\n this.$main.find('input[name=inputGender]').on('change', () => {\r\n this.$main.find('input[name=inputGender]').get(0).setCustomValidity('');\r\n });\r\n\r\n // inputContactTime\r\n this.$main.find('input[name=inputContactTime]').on('change', () => {\r\n this.$main.find('input[name=inputContactTime]').get(0).setCustomValidity('');\r\n });\r\n\r\n this.$main.find('#inputEmail').on('change', function change() {\r\n TestDriveCore.vaildity($(this), '無效的Email');\r\n });\r\n\r\n this.$main.find('#inputPhone').on('change', function change() {\r\n TestDriveCore.vaildity($(this), '請輸入電話');\r\n });\r\n\r\n this.$main.find('#groupDatetime input').on('change', function date() {\r\n TestDriveCore.vaildity($(this), '請選擇期望日期');\r\n });\r\n\r\n this.$main.find('#groupDatetime select').on('change', function time() {\r\n TestDriveCore.vaildity($(this), '請選擇期望時間');\r\n });\r\n\r\n this.locationViewer.on(LocationViewer.LIST_ITEM_CHECK, (data) => {\r\n if (!data) {\r\n this.$main.find('[name=\"chooseStore\"]').get(0).setCustomValidity('請選擇試乘據點');\r\n this.$main.find('[name=\"chooseStore\"]').get(0).reportValidity();\r\n } else {\r\n this.$main.find('[name=\"chooseStore\"]').get(0).setCustomValidity('');\r\n this.$main.find('.search-filter-city select').get(0).setCustomValidity('');\r\n }\r\n });\r\n\r\n this.$main.find('#groupDatetime select').on('change', function time() {\r\n TestDriveCore.vaildity($(this), '請選擇期望時間');\r\n });\r\n\r\n this.$main.find('#instantDatetime select').on('change', function time() {\r\n TestDriveCore.vaildity($(this), '請選擇期望時間');\r\n });\r\n\r\n this.$main.find('#agreeTerms').on('change', (e) => {\r\n if (!$(e.target).prop('checked')) {\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('請先閱讀並同意試乘條款');\r\n this.$main.find('[type=\"submit\"]').get(0).reportValidity();\r\n } else {\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('');\r\n }\r\n });\r\n\r\n this.$main.find('#agreePrivacy').on('change', (e) => {\r\n if (!$(e.target).prop('checked')) {\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('請先閱讀並同意TOYOTA官網隱私權條款');\r\n this.$main.find('[type=\"submit\"]').get(0).reportValidity();\r\n } else {\r\n this.$main.find('[type=\"submit\"]').get(0).setCustomValidity('');\r\n }\r\n });\r\n }\r\n\r\n vail(data) {\r\n if (this.loading) return;\r\n this.loading = true;\r\n $.ajax({\r\n url: this.vaildUrl,\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n data,\r\n })\r\n .done((e) => {\r\n if (e.RS === 'OK') {\r\n this.submidata = data;\r\n $('[data-src=\"#test-drive-vaild\"]').trigger('click');\r\n this.timeInterval();\r\n } else {\r\n alert(e.ERROR);\r\n if (e.LOGINURL !== '') window.location.replace(e.LOGINURL);\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n })\r\n .always(() => {\r\n // console.log('complete');\r\n this.loading = false;\r\n });\r\n }\r\n\r\n onVail(e) {\r\n if (e) e.preventDefault();\r\n let phoneCode = '';\r\n $('.form-verification-code').each((i, element) => {\r\n phoneCode += $(element).val().trim();\r\n });\r\n if (phoneCode.length < 4) {\r\n alert('請輸入驗證碼!');\r\n return;\r\n }\r\n if (this.timer != null) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n this.submidata.checkedItemData = `${this.submidata.checkedItemData.city + this.submidata.checkedItemData.area} - ${this.submidata.checkedItemData.title}`;\r\n this.submidata.phoneCode = phoneCode;\r\n if (this.isInstant) {\r\n this.addPostRsv(this.submidata);\r\n } else { this.submit(this.submidata); }\r\n }\r\n\r\n submit(data) {\r\n if (this.loading) return;\r\n this.loading = true;\r\n $.ajax({\r\n url: this.submitUrl,\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n data,\r\n })\r\n .done((e) => {\r\n let eventLabel = '';\r\n if (e.RS === 'OK') {\r\n eventLabel = 'success';\r\n } else {\r\n eventLabel = 'failed';\r\n }\r\n if (window.dataLayer !== undefined) {\r\n window.dataLayer.push({\r\n event: 'testdriveCar',\r\n event_car: data.CAR, // 車款名稱\r\n event_label: eventLabel, // 如預約成功填入'success',預約失敗填入'failed'\r\n event_engine: data.ENGString, // 引擎類別\r\n });\r\n }\r\n if (e.RS === 'OK') {\r\n alert('預約成功');\r\n location.href = 'testdrive_search.aspx';\r\n } else {\r\n alert(e.RS);\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n })\r\n .always(() => {\r\n // console.log('complete');\r\n this.loading = false;\r\n $.fancybox.close();\r\n $('.form-verification-code').each((i, element) => {\r\n $(element).val('');\r\n });\r\n });\r\n }\r\n\r\n // ?\r\n static onSubmitComplete(data, rsDATA) {\r\n // gapv('testdrive_result.aspx#/{CAR}'.replace(/{CAR}/g, data.CAR));\r\n\r\n // dataLayer.push({'event': 'SubmitForm'});\r\n const $complete = $(tmpl(\r\n $('#template-testdrive-complete-content').html(),\r\n {\r\n NAME: data.NAME,\r\n CARID: data.CAR,\r\n TIME: `${data.DATE} ${data.timeStr}`,\r\n LOCATION: `${data.checkedItemData.city + data.checkedItemData.area} - ${data.checkedItemData.title}`,\r\n },\r\n ));\r\n $complete.find('a.addto-calender').attr({\r\n href: !isMobile() ? rsDATA.EVENT_LINK : rsDATA.EVENT_ICS,\r\n target: !isMobile() ? '_blank' : 'self',\r\n onclick: \"gaev('btn', 'click', 'testdrive_add_btn');\",\r\n });\r\n const carid = this.getSelectedCarId();\r\n switch (carid) {\r\n case 'PRIUS_PHV':\r\n default:\r\n $complete.find('a.limitedcar-couvailditypon').remove();\r\n }\r\n\r\n $('.page-content').empty().append($complete);\r\n window.TheModel.scrollTop(0, 100);\r\n }\r\n\r\n onClickQuery() {\r\n $.ajax({\r\n url: this.CRUrl,\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n data: { LICSNO: `${$('#platFirst').val()}-${$('#platLast').val()}`, vcode: $('#recaptcha').val() },\r\n })\r\n .done((e) => {\r\n if (e.RS === 'OK') {\r\n $('#dspresult').text(e.DSPRESULT);\r\n $('#crResult').show();\r\n } else {\r\n this.$main.find('#recaptcha').get(0).setCustomValidity(e.RS);\r\n this.$main.find('#recaptcha').get(0).reportValidity();\r\n // setTimeout(() => {\r\n // this.$main.find('#recaptcha').get(0).setCustomValidity('');\r\n // }, 1000);\r\n }\r\n this.updateVCode(true);\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n })\r\n .always(() => {\r\n // console.log('complete');\r\n });\r\n }\r\n\r\n static vaildity($obj, message, isVaild = false) {\r\n if (!$obj || $obj.length === 0) {\r\n console.log('vaildity unfind !');\r\n } else if ($obj.get(0).value === '' || isVaild) {\r\n $obj.get(0).setCustomValidity(message);\r\n $obj.get(0).reportValidity();\r\n } else {\r\n $obj.get(0).setCustomValidity('');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static getNow() {\r\n return new Date();\r\n }\r\n\r\n timeInterval() {\r\n if (this.timer != null) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n const time = new Date();\r\n time.setMinutes(time.getMinutes() + 5);\r\n const endTime = time.getTime();\r\n this.timer = setInterval(() => {\r\n // 當前時間\r\n const nowTime = new Date().getTime();\r\n\r\n // 差值\r\n const offsetTime = (endTime - nowTime) / 1000; // ** 以秒為單位\r\n const min = parseInt((offsetTime / 60) % 60, 10); // 分\r\n const sec = parseInt(offsetTime % 60, 10); // 秒\r\n $('#viewTime').text(`${TestDriveCore.padLeft(min, 2)}:${TestDriveCore.padLeft(sec, 2)}`);\r\n if (min <= 0 && sec <= 0) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n }, 200);\r\n }\r\n\r\n static padLeft(str, lenght) {\r\n if (str.toString().length >= lenght) {\r\n return str;\r\n }\r\n return TestDriveCore.padLeft(`0${str}`, lenght);\r\n }\r\n\r\n checkTDV() {\r\n const $obj = this.$main.find('#testDriveCar');\r\n if ($obj.val() === null) {\r\n return true;\r\n }\r\n const $tip = this.$main.find('#noneDrive');\r\n const $serviceTestDrive = this.$main.find('#serviceTestDrive');\r\n const tdv = $obj.find(':selected').data('istdv').toString();\r\n if (tdv === '0') {\r\n $tip.show();\r\n $serviceTestDrive.attr('disabled', true);\r\n $serviceTestDrive.prop('checked', false);\r\n this.initDateHide();\r\n } else {\r\n $tip.hide();\r\n $serviceTestDrive.attr('disabled', false);\r\n // 是否有勾選預約試乘\r\n if (this.$main.find('#serviceTestDrive').prop('checked')) {\r\n // 是否為即刻試乘車種\r\n if (InstantCar.indexOf($obj.val()) > -1) {\r\n this.isInstant = true;\r\n this.$main.find('#groupDatetime').hide();\r\n this.$main.find('#instantDatetime').show();\r\n if (!this.isLogin) {\r\n this.checkLogin();\r\n }\r\n } else {\r\n this.isInstant = false;\r\n this.$main.find('#groupDatetime').show();\r\n this.$main.find('#instantDatetime').hide();\r\n }\r\n } else {\r\n this.initDateHide();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n initDateHide() {\r\n this.isInstant = false;\r\n this.$main.find('#groupDatetime').hide();\r\n this.$main.find('#instantDatetime').hide();\r\n this.$main.find('#groupDatetime input, #groupDatetime select').each((i, element) => {\r\n $(element).get(0).setCustomValidity('');\r\n });\r\n this.$main.find('#instantDatetime input, #instantDatetime select').each((i, element) => {\r\n $(element).get(0).setCustomValidity('');\r\n });\r\n this.initInstTime();\r\n }\r\n\r\n initInstTime() {\r\n this.$main.find('#instantDatetime').find('select').empty();\r\n const tmplHtml = '';\r\n const option = tmpl(tmplHtml, {\r\n VALUE: '',\r\n LABEL: '請選擇時段',\r\n CARTIME: '',\r\n BRANCH: '',\r\n ENDTIME: '',\r\n });\r\n this.$main.find('#instantDatetime').find('select').append(option);\r\n }\r\n\r\n addInstTime(list) {\r\n list.forEach((timeData) => {\r\n const newHtml = ``;\r\n this.$main.find('#instantDatetime').find('select').append(newHtml);\r\n });\r\n }\r\n\r\n getInstTimes(data) {\r\n $.ajax({\r\n url: this.instantUrl,\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n data,\r\n })\r\n .done((e) => {\r\n if (e.RS === 'OK') {\r\n if (e.DATA.length >= 1) {\r\n const result = e.DATA[0];\r\n this.carlist = result.carList;\r\n this.initInstTime();\r\n this.addInstTime(result.timeList);\r\n }\r\n } else {\r\n // console.log(e.RS);\r\n this.initInstTime();\r\n $('#popup-errMsg').trigger('click');\r\n $('#errMsgTitle').text('目前暫無可預約時段');\r\n $('#errMsgResult').text('');\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n this.initInstTime();\r\n })\r\n .always(() => {\r\n // console.log('complete');\r\n });\r\n }\r\n\r\n checkLogin() {\r\n $.ajax({\r\n url: 'api/testdrive_checkLogin.ashx',\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n })\r\n .done((e) => {\r\n if (e.ReturnCode === '9999') {\r\n // console.log(e.ReturnCode);\r\n alert(`即時預約車款,${e.ReturnMsg}`);\r\n window.location.replace('/owner_login.aspx?xurl=testdrive.aspx');\r\n } else {\r\n console.log(e.ReturnCode);\r\n if (this.isInstant) {\r\n this.isLogin = true;\r\n this.userData = e.ReturnData;\r\n // console.log(this.userData);\r\n }\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n });\r\n }\r\n\r\n addPostRsv(data) {\r\n $.ajax({\r\n url: 'api/testdrive_postRsv.ashx',\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n data,\r\n })\r\n .done((e) => {\r\n if (e.RS === 'OK') {\r\n this.submidata = data;\r\n // console.log(e.DATA);\r\n if (e.DATA.isSuccess) {\r\n this.submidata.Webusrid = e.WEBUSRID;\r\n this.submidata.seqno = e.DATA.seqno;\r\n this.submit(this.submidata);\r\n } else {\r\n $.fancybox.close();\r\n $('.form-verification-code').each((i, element) => {\r\n $(element).val('');\r\n });\r\n $('#popup-errMsg').trigger('click');\r\n $('#errMsgTitle').text('預約失敗');\r\n $('#errMsgResult').text('該車款暫時無法即刻預約');\r\n }\r\n } else {\r\n console.log(e.WEBUSRID);\r\n $.fancybox.close();\r\n $('.form-verification-code').each((i, element) => {\r\n $(element).val('');\r\n });\r\n $('#popup-errMsg').trigger('click');\r\n $('#errMsgTitle').text('預約失敗');\r\n $('#errMsgResult').text(e.RS);\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n });\r\n }\r\n}\r\n","var map = {\n\t\"./af\": 71,\n\t\"./af.js\": 71,\n\t\"./ar\": 72,\n\t\"./ar-dz\": 73,\n\t\"./ar-dz.js\": 73,\n\t\"./ar-kw\": 74,\n\t\"./ar-kw.js\": 74,\n\t\"./ar-ly\": 75,\n\t\"./ar-ly.js\": 75,\n\t\"./ar-ma\": 76,\n\t\"./ar-ma.js\": 76,\n\t\"./ar-sa\": 77,\n\t\"./ar-sa.js\": 77,\n\t\"./ar-tn\": 78,\n\t\"./ar-tn.js\": 78,\n\t\"./ar.js\": 72,\n\t\"./az\": 79,\n\t\"./az.js\": 79,\n\t\"./be\": 80,\n\t\"./be.js\": 80,\n\t\"./bg\": 81,\n\t\"./bg.js\": 81,\n\t\"./bm\": 82,\n\t\"./bm.js\": 82,\n\t\"./bn\": 83,\n\t\"./bn.js\": 83,\n\t\"./bo\": 84,\n\t\"./bo.js\": 84,\n\t\"./br\": 85,\n\t\"./br.js\": 85,\n\t\"./bs\": 86,\n\t\"./bs.js\": 86,\n\t\"./ca\": 87,\n\t\"./ca.js\": 87,\n\t\"./cs\": 88,\n\t\"./cs.js\": 88,\n\t\"./cv\": 89,\n\t\"./cv.js\": 89,\n\t\"./cy\": 90,\n\t\"./cy.js\": 90,\n\t\"./da\": 91,\n\t\"./da.js\": 91,\n\t\"./de\": 92,\n\t\"./de-at\": 93,\n\t\"./de-at.js\": 93,\n\t\"./de-ch\": 94,\n\t\"./de-ch.js\": 94,\n\t\"./de.js\": 92,\n\t\"./dv\": 95,\n\t\"./dv.js\": 95,\n\t\"./el\": 96,\n\t\"./el.js\": 96,\n\t\"./en-au\": 97,\n\t\"./en-au.js\": 97,\n\t\"./en-ca\": 98,\n\t\"./en-ca.js\": 98,\n\t\"./en-gb\": 99,\n\t\"./en-gb.js\": 99,\n\t\"./en-ie\": 100,\n\t\"./en-ie.js\": 100,\n\t\"./en-il\": 101,\n\t\"./en-il.js\": 101,\n\t\"./en-in\": 102,\n\t\"./en-in.js\": 102,\n\t\"./en-nz\": 103,\n\t\"./en-nz.js\": 103,\n\t\"./en-sg\": 104,\n\t\"./en-sg.js\": 104,\n\t\"./eo\": 105,\n\t\"./eo.js\": 105,\n\t\"./es\": 106,\n\t\"./es-do\": 107,\n\t\"./es-do.js\": 107,\n\t\"./es-us\": 108,\n\t\"./es-us.js\": 108,\n\t\"./es.js\": 106,\n\t\"./et\": 109,\n\t\"./et.js\": 109,\n\t\"./eu\": 110,\n\t\"./eu.js\": 110,\n\t\"./fa\": 111,\n\t\"./fa.js\": 111,\n\t\"./fi\": 112,\n\t\"./fi.js\": 112,\n\t\"./fil\": 113,\n\t\"./fil.js\": 113,\n\t\"./fo\": 114,\n\t\"./fo.js\": 114,\n\t\"./fr\": 115,\n\t\"./fr-ca\": 116,\n\t\"./fr-ca.js\": 116,\n\t\"./fr-ch\": 117,\n\t\"./fr-ch.js\": 117,\n\t\"./fr.js\": 115,\n\t\"./fy\": 118,\n\t\"./fy.js\": 118,\n\t\"./ga\": 119,\n\t\"./ga.js\": 119,\n\t\"./gd\": 120,\n\t\"./gd.js\": 120,\n\t\"./gl\": 121,\n\t\"./gl.js\": 121,\n\t\"./gom-deva\": 122,\n\t\"./gom-deva.js\": 122,\n\t\"./gom-latn\": 123,\n\t\"./gom-latn.js\": 123,\n\t\"./gu\": 124,\n\t\"./gu.js\": 124,\n\t\"./he\": 125,\n\t\"./he.js\": 125,\n\t\"./hi\": 126,\n\t\"./hi.js\": 126,\n\t\"./hr\": 127,\n\t\"./hr.js\": 127,\n\t\"./hu\": 128,\n\t\"./hu.js\": 128,\n\t\"./hy-am\": 129,\n\t\"./hy-am.js\": 129,\n\t\"./id\": 130,\n\t\"./id.js\": 130,\n\t\"./is\": 131,\n\t\"./is.js\": 131,\n\t\"./it\": 132,\n\t\"./it-ch\": 133,\n\t\"./it-ch.js\": 133,\n\t\"./it.js\": 132,\n\t\"./ja\": 134,\n\t\"./ja.js\": 134,\n\t\"./jv\": 135,\n\t\"./jv.js\": 135,\n\t\"./ka\": 136,\n\t\"./ka.js\": 136,\n\t\"./kk\": 137,\n\t\"./kk.js\": 137,\n\t\"./km\": 138,\n\t\"./km.js\": 138,\n\t\"./kn\": 139,\n\t\"./kn.js\": 139,\n\t\"./ko\": 140,\n\t\"./ko.js\": 140,\n\t\"./ku\": 141,\n\t\"./ku.js\": 141,\n\t\"./ky\": 142,\n\t\"./ky.js\": 142,\n\t\"./lb\": 143,\n\t\"./lb.js\": 143,\n\t\"./lo\": 144,\n\t\"./lo.js\": 144,\n\t\"./lt\": 145,\n\t\"./lt.js\": 145,\n\t\"./lv\": 146,\n\t\"./lv.js\": 146,\n\t\"./me\": 147,\n\t\"./me.js\": 147,\n\t\"./mi\": 148,\n\t\"./mi.js\": 148,\n\t\"./mk\": 149,\n\t\"./mk.js\": 149,\n\t\"./ml\": 150,\n\t\"./ml.js\": 150,\n\t\"./mn\": 151,\n\t\"./mn.js\": 151,\n\t\"./mr\": 152,\n\t\"./mr.js\": 152,\n\t\"./ms\": 153,\n\t\"./ms-my\": 154,\n\t\"./ms-my.js\": 154,\n\t\"./ms.js\": 153,\n\t\"./mt\": 155,\n\t\"./mt.js\": 155,\n\t\"./my\": 156,\n\t\"./my.js\": 156,\n\t\"./nb\": 157,\n\t\"./nb.js\": 157,\n\t\"./ne\": 158,\n\t\"./ne.js\": 158,\n\t\"./nl\": 159,\n\t\"./nl-be\": 160,\n\t\"./nl-be.js\": 160,\n\t\"./nl.js\": 159,\n\t\"./nn\": 161,\n\t\"./nn.js\": 161,\n\t\"./oc-lnc\": 162,\n\t\"./oc-lnc.js\": 162,\n\t\"./pa-in\": 163,\n\t\"./pa-in.js\": 163,\n\t\"./pl\": 164,\n\t\"./pl.js\": 164,\n\t\"./pt\": 165,\n\t\"./pt-br\": 166,\n\t\"./pt-br.js\": 166,\n\t\"./pt.js\": 165,\n\t\"./ro\": 167,\n\t\"./ro.js\": 167,\n\t\"./ru\": 168,\n\t\"./ru.js\": 168,\n\t\"./sd\": 169,\n\t\"./sd.js\": 169,\n\t\"./se\": 170,\n\t\"./se.js\": 170,\n\t\"./si\": 171,\n\t\"./si.js\": 171,\n\t\"./sk\": 172,\n\t\"./sk.js\": 172,\n\t\"./sl\": 173,\n\t\"./sl.js\": 173,\n\t\"./sq\": 174,\n\t\"./sq.js\": 174,\n\t\"./sr\": 175,\n\t\"./sr-cyrl\": 176,\n\t\"./sr-cyrl.js\": 176,\n\t\"./sr.js\": 175,\n\t\"./ss\": 177,\n\t\"./ss.js\": 177,\n\t\"./sv\": 178,\n\t\"./sv.js\": 178,\n\t\"./sw\": 179,\n\t\"./sw.js\": 179,\n\t\"./ta\": 180,\n\t\"./ta.js\": 180,\n\t\"./te\": 181,\n\t\"./te.js\": 181,\n\t\"./tet\": 182,\n\t\"./tet.js\": 182,\n\t\"./tg\": 183,\n\t\"./tg.js\": 183,\n\t\"./th\": 184,\n\t\"./th.js\": 184,\n\t\"./tk\": 185,\n\t\"./tk.js\": 185,\n\t\"./tl-ph\": 186,\n\t\"./tl-ph.js\": 186,\n\t\"./tlh\": 187,\n\t\"./tlh.js\": 187,\n\t\"./tr\": 188,\n\t\"./tr.js\": 188,\n\t\"./tzl\": 189,\n\t\"./tzl.js\": 189,\n\t\"./tzm\": 190,\n\t\"./tzm-latn\": 191,\n\t\"./tzm-latn.js\": 191,\n\t\"./tzm.js\": 190,\n\t\"./ug-cn\": 192,\n\t\"./ug-cn.js\": 192,\n\t\"./uk\": 193,\n\t\"./uk.js\": 193,\n\t\"./ur\": 194,\n\t\"./ur.js\": 194,\n\t\"./uz\": 195,\n\t\"./uz-latn\": 196,\n\t\"./uz-latn.js\": 196,\n\t\"./uz.js\": 195,\n\t\"./vi\": 197,\n\t\"./vi.js\": 197,\n\t\"./x-pseudo\": 198,\n\t\"./x-pseudo.js\": 198,\n\t\"./yo\": 199,\n\t\"./yo.js\": 199,\n\t\"./zh-cn\": 200,\n\t\"./zh-cn.js\": 200,\n\t\"./zh-hk\": 201,\n\t\"./zh-hk.js\": 201,\n\t\"./zh-mo\": 202,\n\t\"./zh-mo.js\": 202,\n\t\"./zh-tw\": 203,\n\t\"./zh-tw.js\": 203\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 256;","export function hasTouch() {\r\n return 'ontouchstart' in window;\r\n}\r\n\r\nexport function isMobile() {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);\r\n}\r\n","export const getUserGeo = () => new Promise((resolve, reject) => {\r\n if (!('geolocation' in navigator)) {\r\n reject(new Error('Cannot get user\\'s position'));\r\n }\r\n\r\n navigator.geolocation.getCurrentPosition((position) => {\r\n resolve(position);\r\n }, (error) => {\r\n reject(error);\r\n });\r\n});\r\n\r\nexport default {\r\n getUserGeo,\r\n};\r\n","/* eslint class-methods-use-this: [\"error\", { \"exceptMethods\": [\"getContent\"] }] */\r\nimport { EventEmitter } from 'events';\r\nimport { tmpl } from '@/utils/util-extent';\r\n\r\nconst { $, google } = window;\r\n\r\nexport default class LocationMap extends EventEmitter {\r\n constructor(dom, list, opt) {\r\n super();\r\n this.list = list;\r\n this.listDict = {};\r\n this.markerDict = {};\r\n this.infoWindow = new google.maps.InfoWindow();\r\n this.defOpt = {\r\n center: { lat: 23.69781, lng: 120.96051499999999 },\r\n zoom: 7,\r\n };\r\n this.opt = $.extend({\r\n center: this.defOpt.center,\r\n zoom: this.defOpt.zoom,\r\n mapTypeControl: false,\r\n zoomControl: false,\r\n streetViewControl: false,\r\n }, opt);\r\n\r\n this.map = new google.maps.Map(dom, this.opt);\r\n this.addMarkers();\r\n }\r\n\r\n addMarkers() {\r\n const self = this;\r\n const icon = LocationMap.getIcon();\r\n let item; let marker;\r\n\r\n this.markerDict = {};\r\n this.listDict = {};\r\n\r\n for (let index = 0; index < this.list.length; index += 1) {\r\n item = this.list[index];\r\n marker = new google.maps.Marker({\r\n position: {\r\n lat: item.lat,\r\n lng: item.lng,\r\n },\r\n map: this.map,\r\n icon,\r\n visible: false,\r\n });\r\n marker.addListener('click', (function click(key) {\r\n return () => {\r\n self.onMarkerClick(key);\r\n };\r\n }(item.key)));\r\n\r\n this.listDict[item.key] = item;\r\n this.markerDict[item.key] = marker;\r\n }\r\n }\r\n\r\n updateNewMarkers(list) {\r\n this.infoWindow.close();\r\n let marker;\r\n Object.keys(this.markerDict).forEach((key) => {\r\n marker = this.markerDict[key];\r\n marker.setVisible(false);\r\n });\r\n this.list = list;\r\n this.addMarkers();\r\n }\r\n\r\n onMarkerClick(key) {\r\n this.showInfoWindow(key);\r\n this.emit(LocationMap.MARKER_CLICK, key);\r\n }\r\n\r\n // 地圖顯示marker內容\r\n getContent(data) {\r\n const $item = $(tmpl($('#template-map-info').html(), data));\r\n if (data.chargerCount === '' || !data.chargerCount) $item.find('.charger-count').remove();\r\n if (data.pricing === '' || !data.pricing) $item.find('.pricing').remove();\r\n if (data.payment === '' || !data.payment) $item.find('.payment').remove();\r\n if (data.tel === '' || !data.tel) $item.find('.tel').remove();\r\n if (!data.aed) $item.find('.aed').remove();\r\n if (!data.exclusive) $item.find('.exclusive').remove();\r\n return $item[0];\r\n }\r\n\r\n showInfoWindow(key) {\r\n const data = this.listDict[key];\r\n const content = this.getContent(data);\r\n $(content).find('.direction-btn').attr('href', this.getDirectionLink(data.lat, data.lng));\r\n this.infoWindow.setContent($(content)[0]);\r\n this.infoWindow.open(this.map, this.markerDict[key]);\r\n }\r\n\r\n updateVisibleMarkers(list) {\r\n this.infoWindow.close();\r\n const bounds = new google.maps.LatLngBounds();\r\n\r\n let item; const listDict = {};\r\n for (let index = 0; index < list.length; index += 1) {\r\n item = list[index];\r\n listDict[item.key] = item;\r\n }\r\n\r\n let marker; let isMatch = false;\r\n let markerVisibleCount = 0;\r\n let lastMatchKey;\r\n Object.keys(this.markerDict).forEach((key) => {\r\n marker = this.markerDict[key];\r\n if (listDict[key]) {\r\n isMatch = true;\r\n markerVisibleCount += 1;\r\n lastMatchKey = key;\r\n marker.setVisible(true);\r\n bounds.extend(marker.getPosition());\r\n } else {\r\n marker.setVisible(false);\r\n }\r\n });\r\n\r\n if (isMatch) {\r\n if (markerVisibleCount > 1) {\r\n this.map.fitBounds(bounds);\r\n } else {\r\n this.panByMarkerKey(lastMatchKey);\r\n }\r\n } else {\r\n this.map.setOptions(this.defOpt);\r\n }\r\n }\r\n\r\n panByMarkerKey(key) {\r\n // console.log(this._map.getZoom());\r\n const item = this.listDict[key];\r\n this.map.panTo({\r\n lat: item.lat,\r\n lng: item.lng,\r\n });\r\n const maxZoom = 16;\r\n // if (this._map.getZoom() < maxZoom)\r\n this.map.setZoom(maxZoom);\r\n this.showInfoWindow(key);\r\n }\r\n\r\n static getIcon() {\r\n return {\r\n url: LocationMap.ICON_URL,\r\n scaledSize: new google.maps.Size(61, 48),\r\n };\r\n }\r\n\r\n static getLink(lat, lng) {\r\n const linkQ = '{LAT},{LNG}/'.replace(/{LNG}/g, lng).replace(/{LAT}/g, lat);\r\n const link = `https://www.google.com.tw/maps/place/${linkQ}`;\r\n return link;\r\n }\r\n\r\n static getLinkByAddr(addr) {\r\n const link = `https://www.google.com.tw/maps/place/${addr}`;\r\n return link;\r\n }\r\n\r\n static getDistance(lat1, lon1, lat2, lon2) {\r\n const deg2rad = Math.PI / 180;\r\n const R = 6371; // Radius of the earth in km\r\n const dLat = deg2rad * (lat2 - lat1); // deg2rad below\r\n const dLon = deg2rad * (lon2 - lon1);\r\n const a = Math.sin(dLat / 2) * Math.sin(dLat / 2)\r\n + Math.cos(deg2rad * lat1) * Math.cos(deg2rad * lat2)\r\n * Math.sin(dLon / 2) * Math.sin(dLon / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n const d = R * c; // Distance in km\r\n return d;\r\n }\r\n\r\n getDirectionLink(tolat, tolng) {\r\n if (this.currentPosition != null) {\r\n return `https://www.google.com/maps/dir/${this.currentPosition.lat},${this.currentPosition.lng}/${tolat},${tolng}`;\r\n }\r\n return '';\r\n }\r\n}\r\n\r\nLocationMap.MARKER_CLICK = 'LocationMap.MarkerClick';\r\nLocationMap.ICON_URL = '/images/icons/location-pin.png';\r\n","import { EventEmitter } from 'events';\r\nimport { tmpl } from '@/utils/util-extent';\r\n\r\nconst { $ } = window;\r\n\r\nexport default class LocationListItem extends EventEmitter {\r\n constructor($container, data, opt) {\r\n super();\r\n this.data = data;\r\n this.map = null;\r\n this.opt = $.extend({\r\n isCheckable: false, // 是否開啟check選項 for 預約\r\n }, opt);\r\n\r\n this.weekday = new Array(7);\r\n this.initWeekName();\r\n\r\n // 資訊內容 一般查詢 以及 選擇預約 template-map-item\r\n this.$item = $(tmpl($('#template-map-item').html(), this.data));\r\n if (this.opt.isCheckable === false) {\r\n // localtion\r\n // 建置每天的營業時間\r\n this.$item.find('.store-info-item ul').empty().append(this.layoutWeekhtml());\r\n // 顯示目前時間間距 呈現營業中或休息中\r\n this.$item.find('.store-info-item .status').empty().append(this.getNowTimeStatus());\r\n this.$item.find('.store-info-item .current-open').empty().append(this.getNowTimeString());\r\n // 判斷顯示項目\r\n this.markerItemshtml();\r\n // 專屬車輛\r\n if (this.data.exclusiveCars.length > 0 && this.data.dateInfo.TYP === 'S') {\r\n this.$item.find('.store-marks').append(`
  • ${this.data.exclusiveCars.join('、')}
  • `);\r\n }\r\n if (!this.data.dist) this.$item.find('.store-distance').remove();\r\n } else {\r\n // 一般預約&預約保養\r\n // reservation預約保養\r\n if (this.opt.isViewMarkerItems) {\r\n this.markerItemshtml();\r\n }\r\n $(this.$item.find('input')).on('click', (e) => {\r\n $(e).prop('checked', true);\r\n this.emit(LocationListItem.CHECK, this.data);\r\n });\r\n }\r\n\r\n\r\n // 綁定事件\r\n $(this.$item.find('.store-content')).on('click', this.onInfoClick.bind(this));\r\n // $(this.$item.find('.item-map-bar .icon')).on('click', this.toggleMapImg.bind(this));\r\n\r\n // this.$map = $(this.$item.find('.item-map'));\r\n $container.append(this.$item);\r\n }\r\n\r\n onInfoClick() {\r\n this.active();\r\n this.emit(LocationListItem.CLICK, this.data.key);\r\n }\r\n\r\n active() {\r\n $('.store-list .store-item').removeClass('active');\r\n this.$item.addClass('active');\r\n }\r\n\r\n initWeekName() {\r\n this.weekday[0] = '星期日';\r\n this.weekday[1] = '星期一';\r\n this.weekday[2] = '星期二';\r\n this.weekday[3] = '星期三';\r\n this.weekday[4] = '星期四';\r\n this.weekday[5] = '星期五';\r\n this.weekday[6] = '星期六';\r\n\r\n // this.weekday[d.getDay()];\r\n }\r\n\r\n getWeekName(offsetDay = 0) {\r\n const timeNow = new Date();\r\n timeNow.setDate(timeNow.getDate() + offsetDay);\r\n return this.weekday[timeNow.getDay()];\r\n }\r\n\r\n getNowTimeStatus(offsetDay = 0) {\r\n const timeNow = new Date();\r\n timeNow.setDate(timeNow.getDate() + offsetDay);\r\n const shiftIndex = timeNow.getDay() - 1;\r\n const isSunDay = timeNow.getDay() === 0;\r\n const { dateInfo } = this.data;\r\n\r\n if (isSunDay) {\r\n if (dateInfo.SDISFLAG === 'Y') {\r\n return LocationListItem.checkTimeStatue(dateInfo.SDTIME);\r\n }\r\n return '公休。';\r\n }\r\n if (dateInfo.Wflags[shiftIndex] === 'Y') {\r\n return LocationListItem.checkTimeStatue(dateInfo.ODTIME);\r\n }\r\n return LocationListItem.checkTimeStatue(this.data.time);\r\n }\r\n\r\n // 預設值為0 時會進入 getNextTimeString\r\n // getNextTimeString 如果遇到計算其他天營業時間會導回getNowTimeString\r\n getNowTimeString(offsetDay = 0) {\r\n const timeNow = new Date();\r\n timeNow.setDate(timeNow.getDate() + offsetDay);\r\n const day = timeNow.getDay();\r\n const shiftIndex = day - 1;\r\n const isSunDay = day === 0;\r\n const { dateInfo } = this.data;\r\n const isGetOtherDay = offsetDay !== 0;\r\n\r\n if (isSunDay) {\r\n if (dateInfo.SDISFLAG === 'Y') {\r\n if (isGetOtherDay) {\r\n return dateInfo.SDTIME;\r\n }\r\n return this.getNextTimeString(dateInfo.SDTIME);\r\n }\r\n return '';\r\n }\r\n if (dateInfo.Wflags[shiftIndex] === 'Y') {\r\n if (isGetOtherDay) {\r\n return dateInfo.ODTIME;\r\n }\r\n return this.getNextTimeString(dateInfo.ODTIME);\r\n }\r\n\r\n\r\n if (isGetOtherDay) {\r\n return this.data.time;\r\n }\r\n return this.getNextTimeString(this.data.time);\r\n }\r\n\r\n getNextTimeString(timeSpan) {\r\n const timeNow = new Date();\r\n const timeSplit = timeSpan.split('~');\r\n if (timeSplit.length !== 2) return '';\r\n const start = parseInt(timeSplit[0].replace(':', ''), 10);\r\n const stop = parseInt(timeSplit[1].replace(':', ''), 10);\r\n const now = timeNow.getHours() * 100 + timeNow.getMinutes();\r\n if (now >= start && now <= stop) {\r\n return timeSpan;\r\n }\r\n if (now < start) {\r\n return `${timeSplit[0]} 營業`;\r\n }\r\n let weekName;\r\n let timeString;\r\n for (let index = 1; index < 7; index += 1) {\r\n if (this.getNowTimeStatus(index) !== '公休') {\r\n timeString = this.getNowTimeString(index);\r\n weekName = this.getWeekName(index);\r\n break;\r\n }\r\n }\r\n return `${weekName} ${timeString.split('~')[0]} 營業`;\r\n }\r\n\r\n static checkTimeStatue(timeSpan) {\r\n const timeNow = new Date();\r\n const timeSplit = timeSpan.split('~');\r\n if (timeSplit.length !== 2) return '公休。';\r\n const start = parseInt(timeSplit[0].replace(':', ''), 10);\r\n const stop = parseInt(timeSplit[1].replace(':', ''), 10);\r\n const now = timeNow.getHours() * 100 + timeNow.getMinutes();\r\n if (now >= start && now <= stop) {\r\n return '營業中。';\r\n }\r\n return '休息中。';\r\n }\r\n\r\n layoutWeekhtml() {\r\n let weekName;\r\n let timeString;\r\n // const weekTime = `
  • {{ weekName }} {{ timeString }}
  • `;\r\n let weekhtml = '';\r\n const sundayIndex = 0;\r\n\r\n this.data.dateInfo.Wflags.forEach((e, i) => {\r\n const index = i + 1;\r\n if (e === 'Y') {\r\n weekName = this.weekday[index];\r\n timeString = this.data.dateInfo.ODTIME;\r\n } else {\r\n weekName = this.weekday[index];\r\n timeString = '公休';\r\n }\r\n weekhtml += LocationListItem.weekHtmlTemplate(weekName, timeString);\r\n });\r\n if (this.data.dateInfo.SDISFLAG === 'Y') {\r\n weekName = this.weekday[sundayIndex];\r\n timeString = this.data.dateInfo.SDTIME;\r\n } else {\r\n weekName = this.weekday[sundayIndex];\r\n timeString = '公休';\r\n }\r\n weekhtml += LocationListItem.weekHtmlTemplate(weekName, timeString);\r\n if (this.data.dateInfo.HDISFLAG === 'Y') {\r\n weekName = '國定假日';\r\n timeString = this.data.dateInfo.HDTIME;\r\n weekhtml += LocationListItem.weekHtmlTemplate(weekName, timeString);\r\n }\r\n\r\n return weekhtml;\r\n }\r\n\r\n static weekHtmlTemplate(weekName, timeString) {\r\n return `
  • ${weekName} ${timeString}
  • `;\r\n }\r\n\r\n markerItemshtml() {\r\n // 判斷顯示項目\r\n if (this.data.ebisflag && this.data.dateInfo.TYP === 'F') this.$item.find('.store-marks').append('
  • ');\r\n if (this.data.ntisflag && this.data.dateInfo.TYP === 'F') this.$item.find('.store-marks').append('
  • ');\r\n if (this.data.aed) this.$item.find('.store-marks').append('
  • ');\r\n if (this.data.exclusive && this.data.dateInfo.TYP === 'F') this.$item.find('.store-marks').append('
  • ');\r\n if (this.data.bpisflag && this.data.dateInfo.TYP === 'F') this.$item.find('.store-marks').append('
  • ');\r\n if (this.data.carHeightType === '1' && this.data.dateInfo.TYP === 'F') {\r\n this.$item.find('.store-marks').append(`
  • 服務廠限高${this.data.limitHeight}cm
  • `);\r\n }\r\n }\r\n}\r\nLocationListItem.CLICK = 'LocationListItem.Click';\r\nLocationListItem.CHECK = 'LocationListItem.Check';\r\n","/* eslint class-methods-use-this: [\"error\", { \"exceptMethods\": [\"adjData\",\"sendMaxnervaLog\",\"dynamicSort\",\"makeCityOption\",\"resetCityOption\"] }] */\r\nimport { EventEmitter } from 'events';\r\nimport { tmpl, verityInput, getSpecialTip } from '@/utils/util-extent';\r\nimport LocationMap from './LocationMap';\r\nimport LocationListItem from './LocationListItem';\r\n\r\nconst { $ } = window;\r\n\r\nconst RANGE = 1000;// km 設定無限大\r\n\r\nexport default class LocationViewer extends EventEmitter {\r\n /**\r\n * Creates an instance of LocationViewer.\r\n *\r\n * @param {any} type: \"1\":展示中心, \"2\":維修據點, \"3\": 充電站\r\n * @param {any} $container\r\n *\r\n * @memberOf LocationViewer\r\n */\r\n constructor(type, $container, opt) {\r\n super();\r\n const self = this;\r\n this.opt = $.extend({\r\n useGPS: true,\r\n isScrollListByMarker: false,\r\n isListItemCheckable: false,\r\n iconUrl: '/images/icons/location-pin.png',\r\n showMap: true,\r\n isMaxnervaLog: false,\r\n }, opt);\r\n\r\n this.locationType = type;\r\n this.$container = $container;\r\n // dynamicdom\r\n // this.$tabCity = this.$container.find('.filter-panel .tabs .tab[data-tab-id=\"city\"]');\r\n // this.$tabKeyword = this.$container.find('.filter-panel .tabs .tab[data-tab-id=\"keyword\"]');\r\n // this.$tabPosition = this.$container.find('.filter-panel .tabs .tab[data-tab-id=\"position\"]');\r\n this.$city = this.$container.find('.location-search .search-filter-city select'); // 縣市下拉選單\r\n this.$area = this.$container.find('.location-search .search-filter-cityarea select'); // 鄉鎮下拉選單\r\n // this.$store = this.$container.find('.filters .store'); //\r\n this.$keyword = this.$container.find('.location-search .search-filters-input input'); // 關鍵字 地址 查詢\r\n this.$listW = this.$container.find('.location-maps-wrapper'); // 控制右邊訊息視窗開關\r\n this.$scrollInfoDom = this.$container.find('.store-list'); // 控制右邊訊息視窗scroll\r\n this.$listContent = this.$container.find('.store-list'); // 預備建置訊息視窗內容\r\n this.list = []; // 取得從 api 傳回資料\r\n this.listShowed = false; // 判斷是否開啟右邊詳細訊息視窗\r\n this.currentList = []; // 存放過濾搜尋條件的資料\r\n this.updateMapDelayer = null;\r\n this.currentFilter = 'city'; // 過濾搜尋條件類型 city keyword 其他為所在位置\r\n // this.currentPostion = null;\r\n this.items = []; // 存放 LocationListItem\r\n this.checkedItemData = null; // 取得選取回傳\r\n this.summary = this.$container.find('.search-result-summary'); // 搜尋結果\r\n this.backProp = null;\r\n this.islinkDirect = false;\r\n LocationMap.ICON_URL = this.opt.iconUrl;\r\n\r\n // this.$container.find('.list .title').html($('#template-location-viewer-list-title').html()); // dynamicdom\r\n\r\n $('.results-toggler').on('click', () => {\r\n if (self.$listW.hasClass('hide-list')) {\r\n self.openList(false);\r\n } else {\r\n self.openList(true);\r\n }\r\n });\r\n\r\n $('#getGeoLocation').on('click', () => {\r\n this.currentFilter = 'position';\r\n this.updateMap();\r\n this.openList();\r\n });\r\n\r\n if (!this.opt.showMap) this.openList(true);\r\n\r\n if (this.opt.list !== undefined) {\r\n this.onLoadList(this.opt.list);\r\n } else {\r\n this.loadList();\r\n }\r\n\r\n this.summary.hide();\r\n this.summary.find('.link-icon-append').on('click', (e) => {\r\n e.preventDefault();\r\n let directType;\r\n if (this.locationType === '1') {\r\n directType = '2';\r\n } else if (this.locationType === '2') {\r\n directType = '1';\r\n }\r\n // 紀錄目前使用參數\r\n this.backProp = { city: this.$city.val(), area: this.$area.val(), keyword: this.$keyword.val() };\r\n this.islinkDirect = true;\r\n $(`input[name=locationType][value=${directType}]`).trigger('click');\r\n });\r\n }\r\n\r\n // 排除特定縣市 by MarkVann → 傳入要排除的縣市名稱列表\r\n excludeCities(list) {\r\n const { listBackup: backup } = this;\r\n if (!backup) {\r\n setTimeout(this.excludeCities.bind(this), 250, list);\r\n return;\r\n }\r\n const list2 = backup.filter(({ city }) => (list.indexOf(city) < 0));\r\n this.updateFilter(list2);\r\n }\r\n\r\n // 只留特定據點 by MarkVann → 傳入要保留的據點KEY列表\r\n targetStores(list) {\r\n const { listBackup: backup } = this;\r\n if (!backup) {\r\n setTimeout(this.targetStores.bind(this), 250, list);\r\n return;\r\n }\r\n const list2 = backup.filter(({ key }) => (list.indexOf(key) > -1));\r\n this.updateFilter(list2);\r\n }\r\n\r\n makeCityOption(list) {\r\n const option = {};\r\n let item;\r\n for (let index = 0; index < list.length; index += 1) {\r\n item = list[index];\r\n if (!option[item.city]) option[item.city] = [];\r\n if (option[item.city].indexOf(item.area) === -1) option[item.city].push(item.area);\r\n }\r\n return option;\r\n }\r\n\r\n resetCityOption(option) {\r\n const { $city: city, $area: area } = this;\r\n city.empty();\r\n area.empty();\r\n city.append('');\r\n area.append('');\r\n Object.keys(option).forEach((key) => {\r\n city.append(\r\n tmpl('', { CITY: key }), // dynamicdom\r\n );\r\n });\r\n }\r\n\r\n updateFilter(list) {\r\n if (!this.listBackup) return;\r\n let newList;\r\n if (!list) {\r\n newList = this.listBackup;\r\n } else {\r\n newList = list;\r\n }\r\n const option = this.makeCityOption(newList);\r\n this.resetCityOption(option);\r\n this.cityOption = option;\r\n this.list = newList;\r\n this.currentList = [];\r\n this.map.updateNewMarkers(newList);\r\n this.openList(false);\r\n this.$listContent.empty();\r\n this.$listW.addClass('hide-list');\r\n this.$keyword.val('');\r\n this.currentPosition = null;\r\n this.summary.hide();\r\n if (this.opt.useGPS) {\r\n this.getCurrentPosition();\r\n }\r\n if (this.islinkDirect) {\r\n if (this.currentFilter === 'city') {\r\n this.$city.val(this.backProp.city);\r\n this.onCityChange();\r\n } else {\r\n this.$keyword.val(this.backProp.keyword);\r\n this.updateMap();\r\n }\r\n }\r\n }\r\n\r\n loadList(isInit = true) {\r\n // var list = require(\"./LocationData.js\");\r\n $.ajax({\r\n url: 'api/location.ashx',\r\n type: 'POST',\r\n dataType: 'json',\r\n data: {\r\n TYPE: this.locationType,\r\n },\r\n })\r\n .done((e) => {\r\n if (e.RS === 'OK') {\r\n if (isInit) {\r\n this.onLoadList(this.adjData(e.DATA));\r\n } else {\r\n this.updateFilter(this.adjData(e.DATA));\r\n }\r\n } else {\r\n console.log(e.RS);\r\n }\r\n })\r\n .fail((e) => {\r\n console.log('error', e);\r\n })\r\n .always(() => {\r\n // console.log('complete');\r\n });\r\n // this.onLoadList(list);\r\n }\r\n\r\n onLoadList(list) {\r\n this.list = list.slice(0);\r\n if (this.opt.showMap) {\r\n this.initMap();\r\n }\r\n this.initCityFilter();\r\n\r\n if (this.opt.useGPS) {\r\n this.getCurrentPosition();\r\n }\r\n this.ready();\r\n }\r\n\r\n adjData(list) {\r\n const newList = [];\r\n let item; let lat; let lng;\r\n for (let key = 0; key < list.length; key += 1) {\r\n item = list[key];\r\n lat = parseFloat(item.LAT);\r\n lng = parseFloat(item.LNG);\r\n if (!Number.isNaN(lat) && !Number.isNaN(lng) && lat !== 0 && lng !== 0) {\r\n newList.push({\r\n lat,\r\n lng,\r\n key: item.KEY,\r\n title: `${item.DEALER}豐田 ${item.TITLE}`,\r\n dealer: item.DEALER,\r\n type: item.TYPE,\r\n city: item.CITY,\r\n area: item.AREA,\r\n address: item.ADDR,\r\n tel: item.TEL,\r\n time: item.TIME,\r\n aed: (item.AED === '1'),\r\n exclusive: (item.EXCLUSIVE === 'Y'),\r\n ebisflag: (item.EBISFLAG === 'Y'),\r\n ntisflag: (item.NTISFLAG === 'Y'),\r\n bpisflag: (item.BPISFLAG === 'Y'),\r\n dateInfo: item.DATEINFO,\r\n exclusiveCars: item.EXCLUSIVECARS, // 展示及維護\r\n carHeightType: item.CARHEIGHTTYPE, // 限高樣式\r\n limitHeight: item.LIMITHEIGHT, // 限高\r\n });\r\n }\r\n }\r\n\r\n return newList;\r\n }\r\n\r\n initMap() {\r\n const $map = this.$container.find('#maps');// dynamicdom\r\n $map.empty();\r\n this.map = new LocationMap($map[0], this.list);\r\n this.map.on(LocationMap.MARKER_CLICK, this.onMarkerClick.bind(this));\r\n }\r\n\r\n initCityFilter() {\r\n const cityOption = {};\r\n let item;\r\n this.$city.append('');\r\n for (let key = 0; key < this.list.length; key += 1) {\r\n item = this.list[key];\r\n if (!cityOption[item.city]) {\r\n cityOption[item.city] = [];\r\n this.$city.append(tmpl('', {\r\n CITY: item.city,\r\n }));\r\n }\r\n if (cityOption[item.city].indexOf(item.area) === -1) {\r\n cityOption[item.city].push(item.area);\r\n }\r\n }\r\n this.$area.html('').prop('disabled', true);\r\n this.$city.on('change', this.onCityChange.bind(this));\r\n this.$area.on('change', this.onAreaChange.bind(this));\r\n // if (this.$store[0]) {\r\n // this.$store.on('change', this.onStoreSelChange.bind(this));\r\n // }\r\n\r\n this.cityOption = cityOption;\r\n this.listBackup = this.list.concat();\r\n }\r\n\r\n onCityChange() {\r\n this.$area.html(''); // dynamicdom\r\n if (this.$city.val() !== '') {\r\n const areas = this.cityOption[this.$city.val()];\r\n for (let i = 0; i < areas.length; i += 1) {\r\n this.$area.append(tmpl('', {\r\n AREA: areas[i],\r\n }));\r\n }\r\n if (this.islinkDirect) {\r\n if (areas.indexOf(this.backProp.area) > -1) {\r\n this.$area.val(this.backProp.area);\r\n } else {\r\n this.$area.append(tmpl('', {\r\n AREA: this.backProp.area,\r\n }));\r\n }\r\n }\r\n }\r\n this.$area.prop('disabled', false);\r\n this.onAreaChange();\r\n }\r\n\r\n onAreaChange() {\r\n this.$keyword.val('');\r\n this.currentFilter = 'city';// this.$tabCity.trigger('click');\r\n this.updateMap();\r\n this.openList();\r\n }\r\n\r\n // onStoreSelChange() {\r\n // if (!this.$store[0]) return;\r\n\r\n // const store = this.$store.val();\r\n // let item;\r\n // for (let key = 0; key < this.list.length; key += 1) {\r\n // item = this.items[key];\r\n // item.check(item.data.key === store, true);\r\n // }\r\n // if (store !== '') {\r\n // this.scrollListByKey(store);\r\n // }\r\n // }\r\n\r\n onKeywordSubmit(e) {\r\n e.preventDefault();\r\n if (this.$keyword.val().length < 1 || verityInput(this.$keyword.val(), 'htmltag') === false) {\r\n alert(getSpecialTip());\r\n return false;\r\n }\r\n this.$city.val('');\r\n this.$area.val('');\r\n this.$city[0].selectedIndex = 0;\r\n this.$area[0].selectedIndex = 0;\r\n $('.location-search .search-filter-city #select2--container').text('請選擇');\r\n $('.location-search .search-filter-cityarea #select2--container').text('請選擇區域');\r\n\r\n this.currentFilter = 'keyword';// this.$tabKeyword.trigger('click');\r\n this.updateMap();\r\n this.openList();\r\n return false;\r\n }\r\n\r\n getCurrentPosition(cb) {\r\n // if (window.location.href.indexOf('toyota') !== -1) {\r\n if ('geolocation' in navigator) {\r\n navigator.geolocation.getCurrentPosition((position) => {\r\n this.onGetCurrentPosition(position, cb);\r\n }, (e) => {\r\n console.log('geolocation error:');\r\n for (let i = 0; i < e.length; i += 1) {\r\n console.log(i, ':', e[i]);\r\n }\r\n });\r\n }\r\n // } else {\r\n // this.onGetCurrentPosition({\r\n // coords: {\r\n // latitude: 25.038341,\r\n // longitude: 121.080813,\r\n // },\r\n // }, cb);\r\n // }\r\n /*\r\n if (\"geolocation\" in navigator) {\r\n navigator.geolocation.getCurrentPosition(function(position) {\r\n this.onGetCurrentPosition(position, cb);\r\n }.bind(this));\r\n }\r\n */\r\n }\r\n\r\n onGetCurrentPosition(position, cb) {\r\n this.currentPosition = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude,\r\n };\r\n this.map.currentPosition = this.currentPosition;\r\n\r\n if (this.list) {\r\n let item;\r\n for (let key = 0; key < this.list.length; key += 1) {\r\n item = this.list[key];\r\n item.dist = Math.round(LocationMap.getDistance(\r\n item.lat,\r\n item.lng,\r\n this.currentPosition.lat,\r\n this.currentPosition.lng,\r\n ));\r\n item.directionLink = this.map.getDirectionLink(item.lat, item.lng);\r\n }\r\n }\r\n\r\n if (cb !== undefined) cb();\r\n }\r\n\r\n updateMap() {\r\n if (this.updateMapDelayer) clearTimeout(this.updateMapDelayer);\r\n this.updateMapDelayer = setTimeout(this.updateMapDelay.bind(this), 100);\r\n }\r\n\r\n updateMapDelay() {\r\n let item;\r\n const q = { type: this.locationType };\r\n if (this.currentFilter === 'city') {\r\n if (this.$city.val().length > 0) {\r\n q.city = this.$city.val();\r\n }\r\n if (this.$area.val().length > 0) {\r\n q.area = this.$area.val();\r\n }\r\n if (q.city || q.area) this.sendMaxnervaLog(q.city, q.area, undefined);\r\n } else if (this.currentFilter === 'keyword') {\r\n const keyword = this.$keyword.val();\r\n if (keyword.length > 0) {\r\n q.keyword = keyword;\r\n this.sendMaxnervaLog(undefined, undefined, q.keyword);\r\n }\r\n }\r\n\r\n this.currentList = [];\r\n\r\n if (this.currentFilter === 'city') {\r\n for (let key = 0; key < this.list.length; key += 1) {\r\n item = this.list[key];\r\n this.isMatch = false;\r\n if (item.type === q.type || q.type === '0') {\r\n if (!q.city && !q.area) {\r\n this.isMatch = true;\r\n } else if (!q.area) {\r\n if (item.city === q.city) this.isMatch = true;\r\n } else if (item.city === q.city && item.area === q.area) this.isMatch = true;\r\n\r\n if (this.isMatch) {\r\n this.currentList.push(item);\r\n }\r\n }\r\n }\r\n } else if (this.currentFilter === 'keyword') {\r\n for (let key = 0; key < this.list.length; key += 1) {\r\n item = this.list[key];\r\n this.isMatch = false;\r\n if (q.keyword !== undefined && (item.type === q.type || q.type === '0')) {\r\n if (item.title.indexOf(q.keyword) !== -1 || item.address.indexOf(q.keyword) !== -1) {\r\n this.isMatch = true;\r\n }\r\n }\r\n if (this.isMatch) this.currentList.push(item);\r\n }\r\n } else if (this.CurrentPosition) {\r\n const list = [];\r\n for (let key = 0; key < this.list.length; key += 1) {\r\n item = this.list[key];\r\n // console.log(item.type, q.type, RANGE, item.dist, item.dist < RANGE);\r\n if ((item.dist < RANGE) && (item.type === q.type || q.type === '0')) {\r\n list.push(item);\r\n }\r\n }\r\n if (list.length > 0) {\r\n list.sort(this.dynamicSort('dist'));\r\n }\r\n this.currentList = list.slice(0, 3);\r\n }\r\n\r\n this.islinkDirect = false; // reset\r\n this.updateMapMarkers();\r\n this.updateList();\r\n this.updateSummary();\r\n }\r\n\r\n updateMapMarkers() {\r\n if (this.map) this.map.updateVisibleMarkers(this.currentList);\r\n }\r\n\r\n updateList() {\r\n this.$listContent.empty().scrollTop(0);\r\n\r\n // var html = $(\"#template-map-item\").html();\r\n this.checkedItemData = null;\r\n this.items = [];\r\n let item;\r\n for (let key = 0; key < this.currentList.length; key += 1) {\r\n const data = this.currentList[key];\r\n item = new LocationListItem(this.$listContent, data, {\r\n isCheckable: this.opt.isListItemCheckable,\r\n isViewMarkerItems: this.opt.isViewMarkerItems,\r\n });\r\n item.on(LocationListItem.CLICK, this.onListItemClick.bind(this));\r\n item.on(LocationListItem.CHECK, this.onListItemCheck.bind(this));\r\n this.items.push(item);\r\n }\r\n // this.updateStoreSel();\r\n if (this.currentList.length > 0) this.$listW.removeClass('hide-list');\r\n }\r\n\r\n updateSummary() {\r\n let currentTypeName;\r\n let optiontypeName;\r\n if (this.locationType === '1') {\r\n currentTypeName = '展示中心';\r\n optiontypeName = '維修據點';\r\n } else if (this.locationType === '2') {\r\n currentTypeName = '維修據點';\r\n optiontypeName = '展示中心';\r\n }\r\n this.summary.show();\r\n this.summary.find('.text-primary').text(this.currentList.length);\r\n this.summary.find('.search-type').text(currentTypeName);\r\n this.summary.find('.link-icon-append').empty();\r\n this.summary.find('.link-icon-append').append(`${optiontypeName}`);\r\n }\r\n // updateStoreSel() {\r\n // if (!this.$store[0]) return;\r\n\r\n // this.$store.html('');// dynamicdom\r\n // let item;\r\n // for (let key = 0; key < this.currentList.length; key += 1) {\r\n // item = this.currentList[key];\r\n // // this.$store.append(''.replace(/{AREA}/g, areas[i]));\r\n // this.$store.append(tmpl('', {\r\n // KEY: item.key,\r\n // TITLE: item.title,\r\n // }));\r\n // }\r\n // }\r\n\r\n onListItemClick(key) {\r\n if (this.map) this.map.panByMarkerKey(key);\r\n }\r\n\r\n onListItemCheck(data) {\r\n // const key = data ? data.key : '';\r\n // let item;\r\n // for (let i = 0; i < this.items.length; i += 1) {\r\n // item = this.items[i];\r\n // // console.log(item.data.key, key);\r\n // if (item.data.key !== key) {\r\n // item.$item.removeClass('CHECKED');\r\n // }\r\n // }\r\n // if (this.$store[0]) this.$store.val(key);\r\n this.checkedItemData = data;\r\n this.emit(LocationViewer.LIST_ITEM_CHECK, data);\r\n }\r\n\r\n onMarkerClick(key) {\r\n if (!this.listShowed) this.openList();\r\n if (this.opt.isScrollListByMarker) {\r\n this.scrollListByKey(key);\r\n }\r\n }\r\n\r\n scrollListByKey(key) {\r\n let $item;\r\n for (let i = 0; i < this.items.length; i += 1) {\r\n const item = this.items[i];\r\n if (item.data.key === key) {\r\n $item = item.$item;\r\n item.active();\r\n }\r\n }\r\n if ($item) {\r\n const top = $item.offset().top - this.$scrollInfoDom.offset().top + this.$scrollInfoDom.scrollTop();\r\n this.$scrollInfoDom.animate({\r\n scrollTop: top,\r\n }, 500);\r\n }\r\n }\r\n\r\n openList(open) {\r\n let isOpen;\r\n if (open === undefined) {\r\n isOpen = true;\r\n } else {\r\n isOpen = open;\r\n }\r\n if (isOpen) {\r\n this.$listW.addClass('hide-list');\r\n this.listShowed = true;\r\n } else {\r\n this.$listW.removeClass('hide-list');\r\n }\r\n }\r\n\r\n ready() {\r\n // this.filterTabs = new TabGroup(\r\n // this.$container.find('.filter-panel .tabs .tab'),\r\n // this.$container.find('.filter-panel .filters .filter')\r\n // );\r\n\r\n // dynamicdom\r\n this.currentFilter = 'city'; // this.$tabCity.trigger('click');\r\n this.$container.find('.location-search .search-filters-input button').on('click', this.onKeywordSubmit.bind(this));\r\n\r\n // this.filterTabs.on('TabGroup.Change', this.onFilterTabsChange.bind(this));\r\n\r\n if (this.opt.exclusive) {\r\n this.updateMapDelay();\r\n this.openList(true);\r\n }\r\n }\r\n\r\n // onFilterTabsChange(id) {\r\n // this.currentFilter = id;\r\n // switch (id) {\r\n // case 'position':\r\n // this.getCurrentPosition(this.updateMap.bind(this));\r\n // break;\r\n // default:\r\n // this.updateMap();\r\n // break;\r\n // }\r\n // }\r\n\r\n sendMaxnervaLog(city, area, keyword) {\r\n const data = {};\r\n if (city) data.CITY = city;\r\n if (area) data.AREA = area;\r\n if (keyword) data.KEYWORD = keyword;\r\n $.ajax({\r\n url: 'api/location_log.ashx',\r\n type: 'POST',\r\n dataType: 'json',\r\n cache: 'false',\r\n data,\r\n });\r\n }\r\n\r\n dynamicSort(argProperty) {\r\n let sortOrder = 1;\r\n let property = argProperty;\r\n if (property[0] === '-') {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n return function sort(a, b) {\r\n let result;// = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\r\n if ((a[property] < b[property])) {\r\n result = -1;\r\n } else if ((a[property] > b[property])) {\r\n result = 1;\r\n } else {\r\n result = 0;\r\n }\r\n return result * sortOrder;\r\n };\r\n }\r\n\r\n get CheckedItemData() {\r\n return this.checkedItemData;\r\n }\r\n\r\n get CurrentPosition() {\r\n if (!this.currentPosition || this.currentPosition == null) {\r\n this.getCurrentPosition(this.updateMap.bind(this));\r\n }\r\n return this.currentPosition;\r\n }\r\n}\r\nLocationViewer.LIST_ITEM_CHECK = 'LocationViewer.ListItemCheck';\r\n","/* eslint-disable no-unused-vars */\r\nimport '~/sass/pages/test-drive.scss';\r\nimport moment from 'moment';\r\nimport { getUserGeo } from '@/utils/geo-info';\r\nimport TestDriveCore from '@/components/module/TestDriveCore';\r\n\r\nconst { $, google } = window;\r\n\r\n$(document).ready(() => {\r\n const driveCore = new TestDriveCore();\r\n // $('#btnAddTestDriveDateTime').on('click', (event) => {\r\n // event.preventDefault();\r\n // });\r\n});\r\n"],"sourceRoot":""}