{"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/LocationMap.js","webpack:///./src/js/components/module/LocationListItem.js","webpack:///./src/js/components/module/LocationViewer.js","webpack:///./src/js/pages/location.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","16","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","google","LocationMap","dom","list","opt","listDict","markerDict","infoWindow","maps","InfoWindow","defOpt","center","lat","lng","zoom","extend","mapTypeControl","zoomControl","streetViewControl","map","Map","addMarkers","url","ICON_URL","scaledSize","Size","linkQ","addr","lat1","lon1","lat2","lon2","deg2rad","PI","dLat","dLon","sin","cos","atan2","sqrt","marker","self","icon","getIcon","index","Marker","position","visible","addListener","onMarkerClick","close","setVisible","showInfoWindow","emit","MARKER_CLICK","$item","html","chargerCount","find","remove","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","empty","append","layoutWeekhtml","getNowTimeStatus","getNowTimeString","markerItemshtml","exclusiveCars","dateInfo","TYP","join","dist","isViewMarkerItems","prop","CHECK","onInfoClick","timeSpan","timeNow","Date","timeSplit","start","stop","now","getHours","getMinutes","weekName","timeString","active","CLICK","removeClass","addClass","offsetDay","setDate","getDate","getDay","shiftIndex","isSunDay","SDISFLAG","checkTimeStatue","SDTIME","Wflags","ODTIME","time","day","isGetOtherDay","getNextTimeString","getWeekName","weekhtml","weekHtmlTemplate","HDISFLAG","HDTIME","ebisflag","ntisflag","bpisflag","carHeightType","limitHeight","LocationViewer","useGPS","isScrollListByMarker","isListItemCheckable","iconUrl","showMap","isMaxnervaLog","locationType","$city","$area","$keyword","$listW","$scrollInfoDom","$listContent","listShowed","currentList","updateMapDelayer","currentFilter","items","checkedItemData","summary","backProp","islinkDirect","hasClass","openList","updateMap","onLoadList","loadList","hide","directType","preventDefault","city","val","area","keyword","trigger","backup","listBackup","list2","filter","indexOf","updateFilter","setTimeout","excludeCities","targetStores","option","CITY","newList","makeCityOption","resetCityOption","cityOption","updateNewMarkers","getCurrentPosition","onCityChange","isInit","ajax","dataType","TYPE","done","RS","adjData","DATA","console","log","fail","always","initMap","initCityFilter","ready","parseFloat","LAT","LNG","Number","isNaN","KEY","title","DEALER","TITLE","dealer","AREA","ADDR","TEL","TIME","AED","EXCLUSIVE","EBISFLAG","NTISFLAG","BPISFLAG","DATEINFO","EXCLUSIVECARS","CARHEIGHTTYPE","LIMITHEIGHT","$map","onAreaChange","concat","areas","alert","selectedIndex","text","cb","navigator","geolocation","onGetCurrentPosition","coords","latitude","longitude","getDistance","directionLink","clearTimeout","updateMapDelay","q","sendMaxnervaLog","CurrentPosition","sort","dynamicSort","updateMapMarkers","updateList","updateSummary","updateVisibleMarkers","scrollTop","onListItemClick","onListItemCheck","currentTypeName","optiontypeName","show","LIST_ITEM_CHECK","scrollListByKey","top","offset","animate","onKeywordSubmit","KEYWORD","cache","argProperty","sortOrder","document","locationViewer","target","typeCode"],"mappings":"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","file":"js/location.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\t16: 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([667,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 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","import '~/sass/pages/location.scss';\r\nimport LocationViewer from '@/components/module/LocationViewer';\r\n\r\nconst { $ } = window;\r\n\r\n$(document).ready(() => {\r\n let locationType = $('input[name=locationType]:checked').val();// 'showroom';\r\n let locationViewer;\r\n\r\n function showWithLocationType() {\r\n $('[data-display-location-type]').hide();\r\n\r\n $(`[data-display-location-type=\"${locationType}\"]`).show();\r\n }\r\n\r\n $('input[name=\"locationType\"]').on('change', (event) => {\r\n const { target } = event;\r\n const typeCode = $(target).filter(':checked').val();\r\n\r\n locationType = typeCode;\r\n locationViewer.locationType = locationType;\r\n locationViewer.loadList(false);\r\n showWithLocationType();\r\n });\r\n\r\n locationViewer = new LocationViewer(locationType, $('.main-wrapper'), {\r\n isMaxnervaLog: false,\r\n isScrollListByMarker: true,\r\n });\r\n\r\n $('#searchLocationForm').on('submit', (e) => {\r\n e.preventDefault();\r\n });\r\n});\r\n"],"sourceRoot":""}