{"version":3,"file":"js/app.d7a7f492.js","mappings":"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","sources":["webpack://seeyaplus/webpack/runtime/chunk loaded","webpack://seeyaplus/webpack/runtime/load script","webpack://seeyaplus/./src/App.vue?7ccd","webpack://seeyaplus/./src/App.vue","webpack://seeyaplus/./src/main.js","webpack://seeyaplus/./src/methods/filters.js","webpack://seeyaplus/./src/router/index.js","webpack://seeyaplus/./src/service/AuthService.js","webpack://seeyaplus/./src/service/CookieService.js","webpack://seeyaplus/./src/stores/authStore.js","webpack://seeyaplus/./src/stores/favoriteStore.js","webpack://seeyaplus/./src/service/HotelService.js","webpack://seeyaplus/./src/stores/hotelStore.js","webpack://seeyaplus/./src/service/SiteService.js","webpack://seeyaplus/./src/stores/siteStore.js","webpack://seeyaplus/webpack/bootstrap","webpack://seeyaplus/webpack/runtime/amd options","webpack://seeyaplus/webpack/runtime/compat get default export","webpack://seeyaplus/webpack/runtime/define property getters","webpack://seeyaplus/webpack/runtime/ensure chunk","webpack://seeyaplus/webpack/runtime/get javascript chunk filename","webpack://seeyaplus/webpack/runtime/get mini-css chunk filename","webpack://seeyaplus/webpack/runtime/global","webpack://seeyaplus/webpack/runtime/harmony module decorator","webpack://seeyaplus/webpack/runtime/hasOwnProperty shorthand","webpack://seeyaplus/webpack/runtime/make namespace object","webpack://seeyaplus/webpack/runtime/node module decorator","webpack://seeyaplus/webpack/runtime/publicPath","webpack://seeyaplus/webpack/runtime/css loading","webpack://seeyaplus/webpack/runtime/jsonp chunk loading","webpack://seeyaplus/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"seeyaplus:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import script from \"./App.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=6840ea00&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n\r\n\r\n\r\n","import { createApp } from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router/index.js'\r\n\r\nimport 'bootstrap/dist/js/bootstrap.bundle.min.js'\r\n\r\n// Axios\r\nimport axios from 'axios'\r\nimport VueAxios from 'vue-axios'\r\n\r\n// Vue Inline SVG\r\nimport InlineSvg from 'vue-inline-svg';\r\n\r\n// Fort Awesome\r\nimport '@fortawesome/fontawesome-free/css/all.css'\r\nimport '@fortawesome/fontawesome-free/js/all.js'\r\n\r\n//I18N\r\nimport enUS from './translations/en-US.json';\r\nimport zhTW from './translations/zh-TW.json';\r\nimport zhCN from './translations/zh-CN.json';\r\nimport jaJP from './translations/ja-JP.json';\r\nimport { createI18n } from 'vue-i18n'\r\n\r\n//Pinia\r\nimport { createPinia } from 'pinia'\r\nconst pinia = createPinia()\r\n\r\n// SweetAlert2\r\nimport VueSweetalert2 from 'vue-sweetalert2';\r\nimport 'sweetalert2/dist/sweetalert2.min.css';\r\n\r\nconst app = createApp(App)\r\n\r\nconst i18n = createI18n({\r\n legacy: false,\r\n locale: \"ja-JP\",\r\n messages: {\r\n \"en-US\": enUS,\r\n \"zh-TW\": zhTW,\r\n \"zh-CN\": zhCN,\r\n \"ja-JP\": jaJP,\r\n },\r\n fallbackLocale: 'en-US',\r\n});\r\n\r\n\r\n// Vue Inline SVG\r\napp.component('inline-svg', InlineSvg);\r\n\r\n// 4. ======== 千分號方法 ========\r\nimport { currency, date } from '@/methods/filters.js'\r\napp.config.globalProperties.$filters = { currency, date }\r\n\r\n// 5. Persist\r\nimport piniaPluginPersistedstate from 'pinia-plugin-persistedstate';\r\npinia.use(piniaPluginPersistedstate);\r\n\r\n// 6. Vee-Validate\r\nimport {Field, Form, ErrorMessage, defineRule} from 'vee-validate';\r\n// 引入 VeeValidate 的驗證規則, typeof這行, 是Bug解決之判斷\r\nimport * as AllRules from '@vee-validate/rules';\r\nObject.keys(AllRules).forEach((rule) => {\r\n if(typeof AllRules[rule] === 'function'){\r\n defineRule(rule, AllRules[rule]);\r\n }\r\n});\r\n\r\napp.component('VField', Field);\r\napp.component('VForm', Form);\r\napp.component('ErrorMessage', ErrorMessage);\r\n\r\napp.use(VueAxios, axios)\r\napp.use(i18n)\r\napp.use(pinia)\r\n\r\napp.use(VueSweetalert2)\r\napp.use(router)\r\napp.mount('#app')\r\n\r\n\r\n","// 千分號\r\nexport function currency (num) {\r\n const n = parseInt(num, 10)\r\n return `${n.toFixed(0).replace(/./g, (c, i, a) => (i && c !== '.' && ((a.length - i) % 3 === 0) ? `, ${c}`.replace(/\\s/g, '') : c))}`\r\n}\r\n\r\n// date從後端 unix timestamp轉換一般的時間格式\r\nexport function date (time) {\r\n const localDate = new Date(time * 1000)\r\n return localDate.toLocaleDateString()\r\n}\r\n","import { createRouter, createWebHistory } from 'vue-router'\r\nimport { useSiteStore } from '@/stores/siteStore';\r\nimport { useAuthStore } from '@/stores/authStore';\r\nimport { useHotelStore } from '@/stores/hotelStore';\r\nimport { AuthService } from '@/service/AuthService';\r\n// Cookie\r\nimport { CookieService } from '@/service/CookieService.js';\r\nimport jwt from 'jsonwebtoken';\r\nimport axios from 'axios';\r\n\r\nconst routes = [\r\n {\r\n path: '/',\r\n component: () => import('@/views/BusinessHome.vue'),\r\n },\r\n {\r\n path: '/home',\r\n component: () => import('@/views/BusinessHome.vue'),\r\n name: 'Home'\r\n },\r\n {\r\n path: '/company',\r\n component: () => import('@/views/BusinessCompany.vue'),\r\n name: 'Company'\r\n },\r\n {\r\n path: '/insight',\r\n component: () => import('@/views/BusinessInsight.vue'),\r\n name: 'Insight'\r\n },\r\n {\r\n path: '/line',\r\n component: () => import('@/views/BusinessLine.vue'),\r\n name: 'Line'\r\n },\r\n {\r\n path: '/trip',\r\n name: 'trip',\r\n redirect: () => {\r\n const siteStore = useSiteStore();\r\n return { name: 'index_locale', params: { locale: siteStore.settings.displayLanguages } };\r\n }\r\n },\r\n {\r\n path: '/trip/:locale',\r\n sensitive: true,\r\n component: () => import('@/views/IndexView.vue'),\r\n name: 'index_locale',\r\n prop: true,\r\n },\r\n {\r\n path: '/trip/:locale/Ikenotaira/', // 池之平\r\n component: () => import('@/views/Project-Ikenotaira.vue'),\r\n name: 'Ikenotaira'\r\n },\r\n {\r\n path: '/trip/:locale/Zagyosoh/', // 坐漁莊\r\n component: () => import('@/views/Project-Zagyosoh.vue'),\r\n name: 'Zagyosoh'\r\n },\r\n {\r\n path: '/trip/:locale/Daytours', // 一日遊\r\n component: () => import('@/views/Travel-daytours.vue'),\r\n name: 'Daytours',\r\n },\r\n {\r\n path: '/trip/:locale/Karuizawa', // 輕井澤一日遊\r\n component: () => import('@/views/Travel-Karuizawa.vue'),\r\n name: 'Karuizawa',\r\n },\r\n {\r\n path: '/trip/:locale/Symphony', // Hotel symphony\r\n component: () => import('@/views/Travel-Symphony.vue'),\r\n name: 'Symphony',\r\n },\r\n {\r\n // path: '/uc',\r\n path: \"/:locale/:pathMatch(.*)*\", // 任何不存在的path, 則進入 UnderConstruction.vue\r\n component: () => import('@/views/UnderConstruction.vue')\r\n },\r\n {\r\n path: '/trip/:locale/privacypolicy',\r\n component: () => import('@/views/PrivacyPolicy.vue'),\r\n name: 'PrivacyPolicy'\r\n },\r\n {\r\n path: \"/trip/:locale/hotelList\", // keywords搜尋後之飯店清單\r\n component: () => import(\"@/views/HotelLists.vue\"),\r\n name: 'HotelLists',\r\n },\r\n {\r\n path: \"/trip/:locale/hotelDetail\", // 指定飯店之詳細方案&房型\r\n component: () => import(\"@/views/HotelDetail.vue\"),\r\n name: 'HotelDetail',\r\n },\r\n {\r\n path: \"/trip/:locale/hotelCheck\", // 客人填寫表單頁\r\n component: () => import(\"@/views/HotelCheck.vue\"),\r\n name: \"hotelCheck\",\r\n meta: { requiresAuth: true }\r\n },\r\n {\r\n path: \"/trip/:locale/myAccount\", // 我的帳號\r\n component: () => import(\"@/components/MyMember/MyAccount.vue\"),\r\n name: \"myAccount\",\r\n meta: { requiresAuth: true }\r\n },\r\n {\r\n path: \"/trip/:locale/myOrder\", // 我的訂單\r\n component: () => import(\"@/components/MyMember/MyOrder.vue\"),\r\n name: \"myOrder\",\r\n meta: { requiresAuth: true, keepAlive: true },\r\n },\r\n {\r\n path: \"/trip/:locale/myReferral\", // 我的推薦人\r\n component: () => import(\"@/components/MyMember/MyReferral.vue\"),\r\n name: \"myReferral\",\r\n meta: { requiresAuth: true },\r\n beforeEnter: (to, from, next) => {\r\n const siteStore = useSiteStore();\r\n if (siteStore.userInfo.IdentityType === '1') {\r\n next();\r\n } else {\r\n // 回上一頁\r\n router.go(-1);\r\n }\r\n }\r\n },\r\n {\r\n path: \"/trip/:locale/myFavorite\", // 我的最愛\r\n component: () => import(\"@/components/MyMember/MyFavorite.vue\"),\r\n name: \"myFavorite\",\r\n meta: { requiresAuth: true }\r\n },\r\n {\r\n path: \"/trip/:locale/orderCompleted\", // 完成訂單(4 Steps)\r\n component: () => import(\"@/components/Order/OrderCompleted.vue\"),\r\n name: \"OrderCompleted\",\r\n },\r\n {\r\n path: \"/trip/:locale/orderFailed\", // 訂單失敗\r\n component: () => import(\"@/components/Order/OrderFailed.vue\"),\r\n name: \"OrderFailed\",\r\n },\r\n {\r\n path: \"/trip/:locale/Order\", //「指定」飯店訂單\r\n component: () => import(\"@/components/Order/Order.vue\"),\r\n name: \"Order\",\r\n },\r\n {\r\n path: \"/trip/:locale/cashier\", // 雲收銀Loading\r\n component: () => import(\"@/components/PlanForm/CashierFormData.vue\"),\r\n name: \"Cashier\"\r\n },\r\n {\r\n path: '/Auth', // 第三方登入後api回傳的頁面\r\n name: 'Auth',\r\n beforeEnter: (to, from, next) => {\r\n const siteStore = useSiteStore();\r\n try {\r\n if (to.query[\"Status\"] == \"Failure\") {\r\n next({ path: '/trip' });\r\n }\r\n let token = to.query[\"Token\"];\r\n let refreshToken = to.query[\"RefreshToken\"];\r\n localStorage.setItem('AccessToken', token);\r\n localStorage.setItem('RefreshToken', refreshToken);\r\n let jwtDecode = '';\r\n if (token !== null || token !== \"undefined\") {\r\n jwtDecode = jwt.decode(token);\r\n if (jwtDecode) {\r\n siteStore.userInfo = jwtDecode;\r\n }\r\n }\r\n const lastPage = localStorage.getItem(\"LastPage\") ?? '';\r\n\r\n // 發送設備碼及推薦人的推薦碼\r\n const apiUrl = process.env.VUE_APP_API_URL + '/api/V1/P02/A06/A02/P02A06A02M005';\r\n let referralCode = CookieService.getItem(\"ReferralCode\") ?? '';\r\n let equipmentNo = localStorage.getItem(\"ENO\") ?? '';\r\n const data = {\r\n \"Language\": siteStore.settings.displayLanguages,\r\n \"Nbr\": jwtDecode.Nbr ?? '',\r\n \"Email\": jwtDecode.email ?? '',\r\n \"SrcAttr\": jwtDecode.Source ?? '',\r\n \"RecommendedBy\": referralCode ?? '',\r\n \"EquipmentNo\": equipmentNo\r\n }\r\n axios.post(apiUrl, data)\r\n .then(response => {\r\n //console.log('登入成功發送');\r\n })\r\n .catch(error => {\r\n console.error('發送登入時出錯', error);\r\n next({ path: '/trip' });\r\n });\r\n if (lastPage) {\r\n next(lastPage);\r\n } else {\r\n next({ path: '/trip' });\r\n }\r\n } catch (error) {\r\n next({ path: '/trip' });\r\n }\r\n finally {\r\n localStorage.removeItem(\"LastPage\");\r\n }\r\n }\r\n },\r\n {\r\n path: '/trip/:locale/flightOrder',\r\n name: 'flightOrder', //「指定」機票訂單\r\n beforeEnter: (to, from, next) => {\r\n const siteStore = useSiteStore();\r\n AuthService.getTicket(siteStore.userInfo.email).then(response => {\r\n window.location.href = `${process.env.VUE_APP_Flight_URL}/${switchLang(siteStore.settings.displayLanguages)}/orderList?ticket=${response.Data}`;\r\n }).catch(error => {\r\n console.error('error', error);\r\n });\r\n }\r\n },\r\n {\r\n path: '/trip/:locale/flight',\r\n name: 'flight', //「指定」機票館\r\n beforeEnter: (to, from, next) => {\r\n const siteStore = useSiteStore();\r\n AuthService.getTicket(siteStore.userInfo.email).then(response => {\r\n if (siteStore.userInfo?.email) {\r\n window.location.href = `${process.env.VUE_APP_Flight_URL}/${switchLang(siteStore.settings.displayLanguages)}?ticket=${response.Data}`;\r\n }\r\n else {\r\n window.location.href = `${process.env.VUE_APP_Flight_URL}/${switchLang(siteStore.settings.displayLanguages)}`;\r\n }\r\n }).catch(error => {\r\n console.error('error', error);\r\n });\r\n }\r\n },\r\n]\r\n\r\nfunction switchLang(lang) {\r\n switch (lang) {\r\n case 'zh-TW':\r\n return 'Tw';\r\n case 'zh-CN':\r\n return 'Cn';\r\n case 'ja-JP':\r\n return 'Ja';\r\n case 'en-US':\r\n return 'En';\r\n default:\r\n return 'Ja';\r\n }\r\n}\r\n\r\nconst router = createRouter({\r\n history: createWebHistory(process.env.BASE_URL),\r\n routes,\r\n scrollBehavior: function (to, _from, savedPosition) {\r\n if (savedPosition) {\r\n return savedPosition;\r\n }\r\n if (to.hash) {\r\n return { el: to.hash, behavior: \"smooth\" };\r\n } else {\r\n console.log(\"moving to top of the page\");\r\n window.scrollTo(0, 0);\r\n }\r\n },\r\n strict: true,\r\n})\r\n\r\nrouter.beforeEach(async (to, from, next) => {\r\n const authStore = useAuthStore();\r\n const siteStore = useSiteStore();\r\n // 檢查並更新語言設置\r\n if (to.params.locale) {\r\n siteStore.settings.displayLanguages = to.params.locale;\r\n }\r\n //#region 記錄進入網頁設備的資訊(開始)\r\n siteStore.recordEquipmemt(siteStore, from, to, next);\r\n // #endregion\r\n // #region 取得登入狀態(開始)\r\n AuthService.checkToken(authStore, siteStore, to, from, next);\r\n // #endregion\r\n if (to.query?.ticket) {\r\n var isAuth = await AuthService.checkTicket(siteStore, to.query?.ticket);\r\n if (isAuth) {\r\n next({ path: to.path, query: {} });\r\n }\r\n }\r\n else if (to.meta.requiresAuth && !siteStore.userInfo) {\r\n next({ path: '/trip' });\r\n }\r\n else {\r\n next();\r\n }\r\n});\r\n\r\n\r\n// 1. 若不是進入「飯店列表」以及「房型方案」, 進階搜尋變數全初始化!\r\nrouter.afterEach((to, from) => {\r\n const hotelStore = useHotelStore();\r\n if (to.name !== 'HotelLists' && to.name !== 'HotelDetail') {\r\n hotelStore.advancedParams.smoking = null;\r\n hotelStore.advancedParams.bedType = null;\r\n hotelStore.advancedParams.facilityArr = [];\r\n hotelStore.filteredAllHotels.HotelPriceRange = {}\r\n }\r\n})\r\n\r\nexport default router","import axios from \"axios\";\r\nimport jwt from 'jsonwebtoken';\r\n\r\nexport class AuthService {\r\n static apiKey = \"\";\r\n static apiSecret = \"\";\r\n\r\n static async getAccessToken() {\r\n return process.env.VUE_APP_ACCESSTOKEN;\r\n }\r\n\r\n static loginGoogle() {\r\n const googleAuthUrl = `${process.env.VUE_APP_API_URL}/api/Oauth/LoginGoogle`\r\n if (navigator.userAgent) {\r\n const customUserAgent = 'Mozilla/5.0 (Linux; Android 13; SM-G986U1 Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 WEBVIEW TEST/1.3.1.106 (Phone; anonymous)';\r\n window.open(googleAuthUrl, '_self', `user-agent=${customUserAgent}`);\r\n } else {\r\n window.location.href = googleAuthUrl;\r\n }\r\n }\r\n\r\n static loginFB() {\r\n const FBAuthUrl = `https://www.facebook.com/v19.0/dialog/oauth?\r\nclient_id=${process.env.VUE_APP_FB_CLIENT_ID}\r\n&scope=openid,public_profile,email\r\n&display=popup\r\n&response_type=code\r\n&redirect_uri=${process.env.VUE_APP_FB_REDIRECT_URI}\r\n&state=${process.env.VUE_APP_ACCESSTOKEN}`\r\n\r\n window.location.href = FBAuthUrl;\r\n }\r\n\r\n static logOut = () => {\r\n window.location.href = process.env.VUE_APP_API_URL + \"/api/Oauth/Logout\";\r\n };\r\n\r\n static refreshToken = async (refreshToken) => {\r\n const encodedRefreshToken = encodeURIComponent(refreshToken);\r\n const apiUrl = `${process.env.VUE_APP_API_URL}/api/Oauth/AccessToken?RefreshToken=${encodedRefreshToken}`;\r\n try {\r\n const response = await axios.get(apiUrl);\r\n return response.data;\r\n } catch (error) {\r\n console.error('Error refreshing token:', error);\r\n }\r\n };\r\n\r\n static checkToken = (authStore, siteStore, from, to, next) => {\r\n let token = localStorage.getItem(\"AccessToken\");\r\n let refreshToken = localStorage.getItem(\"RefreshToken\");\r\n // 確認是否有登入\r\n siteStore.userInfo = \"\";\r\n if (token?.length > 0 && token !== \"undefined\" && token !== \"null\") {\r\n let jwtDecode = jwt.decode(token);\r\n // 確認token是否過期,過期則重新則確認真否有refreshToken,有則重新取得AccessToken\r\n if (jwtDecode.exp < Date.now() / 1000) {\r\n localStorage.removeItem(\"AccessToken\");\r\n // 有refreshToken,重新取得AccessToken\r\n if (refreshToken && refreshToken.length > 0) {\r\n authStore.refreshToken(refreshToken).then(accessToken => {\r\n // refreshToken失效, 則刪除LocalStorage,提示重新登入\r\n if (accessToken == null || accessToken == \"undefined\") {\r\n localStorage.removeItem(\"AccessToken\");\r\n localStorage.removeItem(\"RefreshToken\");\r\n if (to.meta.requiresAuth) {\r\n authStore.errorSwal('Error', 'Refreshing token invalid');\r\n next({ path: '/trip' });\r\n }\r\n return;\r\n }\r\n // refreshToken有效,重新設定AccessToken\r\n localStorage.setItem(\"AccessToken\", accessToken);\r\n let jwtDecode = jwt.decode(accessToken);\r\n siteStore.userInfo = jwtDecode;\r\n }).catch(error => {\r\n console.error(\"Error refreshing token:\", error);\r\n if (to.meta.requiresAuth) {\r\n authStore.errorSwal('Error', 'Refreshing token invalid');\r\n next({ path: '/trip' });\r\n }\r\n return;\r\n });\r\n }\r\n }\r\n else {\r\n // token未過期,直接設定userInfo\r\n siteStore.userInfo = jwtDecode;\r\n }\r\n }\r\n // 如果token不存在,且有refreshToken,重新取得AccessToken\r\n else if ((token == null || token == \"undefined\" || token == \"null\") && refreshToken && refreshToken.length > 0) {\r\n authStore.refreshToken(refreshToken).then(accessToken => {\r\n // refreshToken失效, 則刪除LocalStorage,提示重新登入\r\n if (accessToken == null || accessToken == \"undefined\") {\r\n localStorage.removeItem(\"AccessToken\");\r\n localStorage.removeItem(\"RefreshToken\");\r\n if (to.meta.requiresAuth) {\r\n authStore.errorSwal('Error', 'Refreshing token invalid');\r\n next({ path: '/trip' });\r\n }\r\n return;\r\n }\r\n // refreshToken有效,重新設定AccessToken\r\n localStorage.setItem(\"AccessToken\", accessToken);\r\n let jwtDecode = jwt.decode(accessToken);\r\n siteStore.userInfo = jwtDecode;\r\n }).catch(error => {\r\n localStorage.removeItem(\"AccessToken\");\r\n localStorage.removeItem(\"RefreshToken\");\r\n console.error(\"Error Refreshing token:\", error);\r\n if (to.meta.requiresAuth) {\r\n authStore.errorSwal('Error', 'Refreshing token invalid');\r\n next({ path: '/trip' });\r\n }\r\n return;\r\n });\r\n }\r\n }\r\n\r\n static checkTicket = async (siteStore, ticket) => {\r\n let token = localStorage.getItem(\"AccessToken\");\r\n let refreshToken = localStorage.getItem(\"RefreshToken\");\r\n if ((token === null || token === \"undefined\" || token === 'null') && (refreshToken === null || refreshToken === 'null' || refreshToken === \"undefined\")) {\r\n const apiUrl = process.env.VUE_APP_API_URL + '/api/User/GetLoginToken?ticket=' + ticket;\r\n const response = await axios.get(apiUrl, {\r\n headers: {\r\n 'Authorization': process.env.VUE_APP_ACCESSTOKEN\r\n }\r\n })\r\n if (response.status === 200) {\r\n const data = response.data;\r\n const params = new URLSearchParams(data);\r\n const token = params.get('Token');\r\n const refreshToken = params.get('RefreshToken');\r\n localStorage.setItem('AccessToken', token);\r\n localStorage.setItem('RefreshToken', refreshToken);\r\n let jwtDecode = '';\r\n if (token !== null || token !== \"undefined\") {\r\n jwtDecode = jwt.decode(token);\r\n if (jwtDecode) {\r\n siteStore.userInfo = jwtDecode;\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static getTicket = async (email) => {\r\n const apiUrl = `${process.env.VUE_APP_API_URL}/api/User/GetTicket`;\r\n const data = {\r\n Email: email\r\n }\r\n try {\r\n const response = await axios.post(apiUrl, data, {\r\n headers: {\r\n 'Authorization': process.env.VUE_APP_ACCESSTOKEN\r\n }\r\n });\r\n if (response.status === 200) {\r\n return response.data;\r\n }\r\n } catch (error) {\r\n console.error('Error refreshing token:', error);\r\n }\r\n }\r\n}\r\n","export class CookieService {\r\n static getItem(sKey) {\r\n return (\r\n decodeURIComponent(\r\n document.cookie.replace(\r\n new RegExp(\r\n \"(?:(?:^|.*;)\\\\s*\" +\r\n encodeURIComponent(sKey).replace(/[-.+*]/g, \"\\\\$&\") +\r\n \"\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$\",\r\n ),\r\n \"$1\",\r\n ),\r\n ) || null\r\n );\r\n }\r\n static setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\r\n if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\r\n return false;\r\n }\r\n var sExpires = \"\";\r\n if (vEnd) {\r\n switch (vEnd.constructor) {\r\n case Number:\r\n sExpires =\r\n vEnd === Infinity\r\n ? \"; expires=Fri, 31 Dec 9999 23:59:59 GMT\"\r\n : \"; max-age=\" + vEnd;\r\n break;\r\n case String:\r\n sExpires = \"; expires=\" + vEnd;\r\n break;\r\n case Date:\r\n sExpires = \"; expires=\" + vEnd.toUTCString();\r\n break;\r\n }\r\n }\r\n document.cookie =\r\n encodeURIComponent(sKey) +\r\n \"=\" +\r\n encodeURIComponent(sValue) +\r\n sExpires +\r\n (sDomain ? \"; domain=\" + sDomain : \"\") +\r\n (sPath ? \"; path=\" + sPath : \"\") +\r\n (bSecure ? \"; secure\" : \"\");\r\n return true;\r\n }\r\n static removeItem(sKey, sPath, sDomain) {\r\n if (!sKey || !this.hasItem(sKey)) {\r\n return false;\r\n }\r\n document.cookie =\r\n encodeURIComponent(sKey) +\r\n \"=; expires=Thu, 01 Jan 1970 00:00:00 GMT\" +\r\n (sDomain ? \"; domain=\" + sDomain : \"\") +\r\n (sPath ? \"; path=\" + sPath : \"\");\r\n return true;\r\n }\r\n static hasItem(sKey) {\r\n return new RegExp(\r\n \"(?:^|;\\\\s*)\" +\r\n encodeURIComponent(sKey).replace(/[-.+*]/g, \"\\\\$&\") +\r\n \"\\\\s*\\\\=\",\r\n ).test(document.cookie);\r\n }\r\n static keys() {\r\n var aKeys = document.cookie\r\n .replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, \"\")\r\n .split(/\\s*(?:\\=[^;]*)?;\\s*/);\r\n for (var nIdx = 0; nIdx < aKeys.length; nIdx++) {\r\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\r\n }\r\n return aKeys;\r\n }\r\n };\r\n ","import { defineStore } from 'pinia'\r\nimport { ref } from 'vue'\r\nimport { AuthService } from \"@/service/AuthService\";\r\nimport Swal from 'sweetalert2'\r\n\r\n\r\nexport const useAuthStore = defineStore('auth', () => {\r\n const accessToken = ref('');\r\n async function updateAccessToken() {\r\n try {\r\n let Token = await AuthService.getAccessToken();\r\n return this.accessToken = Token;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n function loginGoogle() {\r\n try {\r\n AuthService.loginGoogle();\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n function loginFB() {\r\n try {\r\n AuthService.loginFB();\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n async function refreshToken(refreshToken) {\r\n try {\r\n var token = await AuthService.refreshToken(refreshToken);\r\n return token;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n function logOut() {\r\n AuthService.logOut();\r\n }\r\n\r\n \r\n\r\n function errorSwal(title, text) {\r\n Swal.fire({\r\n title: title + \"!\",\r\n text: text,\r\n icon: 'error',\r\n confirmButtonText: 'Confirm'\r\n })\r\n }\r\n\r\n return { errorSwal, refreshToken, accessToken, updateAccessToken, loginGoogle, loginFB, logOut }\r\n}) ","import { defineStore } from \"pinia\";\r\nimport { ref } from \"vue\";\r\n\r\nexport const useFavoriteStore = defineStore(\"favorite\", ()=> {\r\n const loveList = ref([]);\r\n\r\n // 1. 加入 or 刪除 我的最愛\r\n const addMyLove = (hotelCode) => {\r\n // 1.1 查看是否以加入我的最愛, 是 >> 就會有 loveExisted\r\n const loveExisted = loveList.value.find((item) => item === hotelCode);\r\n // 1.1 若已是我的最愛, 就砍掉其飯店\r\n if(loveExisted) {\r\n loveList.value = loveList.value.filter((item, index) => {\r\n return item !== loveExisted\r\n })\r\n }\r\n // 1.2 加入我的最愛 \r\n else {\r\n loveList.value.unshift(hotelCode)\r\n }\r\n }\r\n\r\n\r\n return { loveList, addMyLove }\r\n},\r\n\r\n { \r\n persist: { key: \"myFavorite\", paths:[\"loveList\"] } \r\n }\r\n)","import axios from \"axios\";\r\nimport { AuthService } from \"./AuthService\";\r\nimport hotel from '@/assets/json/recommandHotel.json';\r\n\r\n// TODO: 整個檔案都要改\r\nexport class HotelService {\r\n static getRecommandHotel(langCode) {\r\n // let accessToken = await AuthService.getAccessToken();\r\n // let dataURL =\r\n // process.env.VUE_APP_API_URL +\r\n // `/api/V1/P02/A05/A01/P02A05A01F001?L=${langCode}&D=` +\r\n // window.location.hostname;\r\n // let response = await axios({\r\n // method: \"GET\",\r\n // url: dataURL,\r\n // responseType: \"json\",\r\n // headers: {\r\n // Authorization: accessToken,\r\n // },\r\n // }).catch(function (error) {\r\n // console.log(error);\r\n // });\r\n\r\n //console.log(response);\r\n\r\n // return response.data.Data.P01A05A01F001List;\r\n if (langCode == \"zh-TW\") {\r\n return hotel.Data.hotelList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return hotel.Data.hotelList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return hotel.Data.hotelList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return hotel.Data.hotelList_jaJP;\r\n }\r\n }\r\n}\r\n","import { defineStore } from 'pinia'\r\nimport { computed, reactive, ref } from 'vue'\r\nimport { AuthService } from \"@/service/AuthService\";\r\nimport { HotelService } from \"@/service/HotelService\";\r\nimport { useSiteStore } from './siteStore';\r\nimport { useFavoriteStore } from \"./favoriteStore\";\r\nimport {useRouter, useRoute} from \"vue-router\";\r\n\r\nexport const useHotelStore = defineStore('hotel', () => {\r\n const siteStore = useSiteStore();\r\n\r\n // 0. 日曆預設「入住日」+「退房日」\r\n const today = ref(formatDate(new Date)); // 初始化「今天」,轉成2024-MM-DD\r\n const tomorrow = ref(formatDate(new Date(Date.now() + 86400000))) // 初始化「明天」, 2024-MM-DD\r\n\r\n const hotelSearch = reactive({\r\n destination: \"\",\r\n searchType: \"\",\r\n date: \"\",\r\n mealOption: \"\",\r\n rooms: [\r\n { adult: 1, childWithBed: 0, childWithoutBed: 0 }\r\n ],\r\n dateRange: today.value + ' ~ ' + tomorrow.value,\r\n dateStart: today.value, // 第一次進頁面先抓「今天」, 選VDatePicker後, 就吃VDatePicker傳來的值\r\n dateEnd: tomorrow.value, // 第一次進頁面先抓「明天」, 選VDatePicker後, 就吃VDatePicker傳來的值\r\n adults: 1,\r\n room: 1,\r\n kid_1to3: 0,\r\n kid_4to6: 0,\r\n babyWithBoth: 0,\r\n babyWithMeal: 0,\r\n babyWithBed: 0,\r\n babyNoBoth: 0,\r\n stayNights: 0,\r\n });\r\n\r\n const recommandHotel = computed(() => {\r\n return HotelService.getRecommandHotel(siteStore.settings.displayLanguages);\r\n })\r\n \r\n // add new room\r\n function addRoom () {\r\n hotelSearch.rooms.push({ adult: 1, childWithBed: 0, childWithoutBed: 0 });\r\n }\r\n // remove last room\r\n function removeRoom () {\r\n if (hotelSearch.rooms.length > 1){\r\n hotelSearch.rooms.pop();\r\n }\r\n }\r\n\r\n // 新增成人數量\r\n function addAdult (roomIndex) {\r\n hotelSearch.rooms[roomIndex].adult += 1;\r\n }\r\n\r\n // 移除成人數量\r\n function removeAdult (roomIndex) {\r\n if (hotelSearch.rooms[roomIndex].adult > 1){\r\n hotelSearch.rooms[roomIndex].adult -= 1;\r\n }\r\n }\r\n\r\n // 新增小孩帶床數量\r\n function addChildWithBed (roomIndex) {\r\n hotelSearch.rooms[roomIndex].childWithBed += 1;\r\n }\r\n\r\n // 移除小孩帶床數量\r\n function removeChildWithBed (roomIndex) {\r\n if (hotelSearch.rooms[roomIndex].childWithBed > 0){\r\n hotelSearch.rooms[roomIndex].childWithBed -= 1;\r\n }\r\n }\r\n\r\n // 新增小孩不帶床數量\r\n function addChildWithoutBed (roomIndex) {\r\n hotelSearch.rooms[roomIndex].childWithoutBed += 1;\r\n }\r\n\r\n // 移除小孩不帶床數量\r\n function removeChildWithoutBed (roomIndex) {\r\n if (hotelSearch.rooms[roomIndex].childWithoutBed > 0){\r\n hotelSearch.rooms[roomIndex].childWithoutBed -= 1;\r\n }\r\n }\r\n\r\n // ================= Kory的Pinia =================\r\n const router = useRouter();\r\n const route = useRoute();\r\n const langStorage = ref(null); // localStorage 語系\r\n const filteredAllHotels = ref([]); // 給 HotelLists.vue, 用來渲染關鍵字匹配之飯店\r\n const isNoHotel = ref(false); //「找不到搜尋結果」之FLAG\r\n const skeletonLoading = ref(false); //「SKELETON 讀取」之FLAG\r\n\r\n // 1. 給 HotelLists.vue 渲染用(透過 route 傳filteredHotels.value, 做陣列物件渲染)\r\n \r\n \r\n // 2. 增減成人\r\n const addAdults = () => hotelSearch.adults +=1;\r\n const minusAdults = () => {\r\n if(hotelSearch.adults > 1) hotelSearch.adults -=1; \r\n };\r\n\r\n // 3. 增減房間\r\n const addRooms = () => hotelSearch.room +=1;\r\n const minusRooms = () => {\r\n if(hotelSearch.room > 1) hotelSearch.room -=1; \r\n };\r\n\r\n // 4.增減小學生\r\n const addKids_1to3 = () => hotelSearch.kid_1to3 +=1;\r\n const addKids_4to6 = () => hotelSearch.kid_4to6 +=1;\r\n const minusKids_1to3 = () => {\r\n if(hotelSearch.kid_1to3 > 0) hotelSearch.kid_1to3 -=1;\r\n };\r\n const minusKids_4to6 = () => {\r\n if(hotelSearch.kid_4to6 > 0) hotelSearch.kid_4to6 -=1;\r\n };\r\n\r\n // 5. 增減嬰兒\r\n const addBabyBoth = () => hotelSearch.babyWithBoth +=1;\r\n const addBabyMeal = () => hotelSearch.babyWithMeal +=1;\r\n const addBabyBed = () => hotelSearch.babyWithBed +=1;\r\n const addBabyNoBoth = () => hotelSearch.babyNoBoth +=1;\r\n const minusBabyBoth = () => {\r\n if(hotelSearch.babyWithBoth >0) hotelSearch.babyWithBoth -=1;\r\n };\r\n const minusBabyMeal = () => {\r\n if(hotelSearch.babyWithMeal >0) hotelSearch.babyWithMeal -=1;\r\n };\r\n const minusBabyBed = () => {\r\n if(hotelSearch.babyWithBed >0) hotelSearch.babyWithBed -=1;\r\n };\r\n const minusBabyNoBoth = () => {\r\n if(hotelSearch.babyNoBoth >0) hotelSearch.babyNoBoth -=1;\r\n };\r\n\r\n // 6. 小朋友統計人數\r\n const totalKids = computed(() => {\r\n return hotelSearch.kid_1to3 + hotelSearch.kid_4to6 + hotelSearch.babyWithBoth\r\n + hotelSearch.babyWithMeal + hotelSearch.babyWithBed + hotelSearch.babyNoBoth\r\n });\r\n\r\n // 11. 給每個飯店, 增加 loveFlag:false\r\n function giveLoveFlag (hotels) {\r\n return hotels.map((hotel) => ({\r\n ...hotel,\r\n loveFlag: false\r\n }))\r\n }\r\n\r\n // 12. 重新API搜尋時, 再次檢查 loveFlag:true/false\r\n const favoriteStore = useFavoriteStore();\r\n\r\n // 13. 日期格式化\r\n function formatDate(date) {\r\n // var day_list = translate(\"weekdays\").split(\",\");\r\n var d = new Date(date),\r\n month = \"\" + (d.getMonth() + 1),\r\n day = \"\" + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2) month = \"0\" + month;\r\n if (day.length < 2) day = \"0\" + day;\r\n\r\n // return [year, month, day].join(\"-\") + `(${day_list[d.getDay()]})`;\r\n return [year, month, day].join(\"-\"); // 去除(Fri)(Sat)字眼\r\n }\r\n\r\n // 14. 更新日期(若上次CheckIn晚於今日, 如昨天選0731, 那今天要自動切成0801)\r\n const updateDates = (newCheckIn, newCheckout) => {\r\n hotelSearch.dateStart = newCheckIn;\r\n hotelSearch.dateEnd = newCheckout;\r\n hotelSearch.dateRange = newCheckIn + '-' + newCheckout\r\n }\r\n\r\n // 15. 渲染「找不到」飯店\r\n const checkEmptyHotel = () => {\r\n if(filteredAllHotels.value.HotelList.length === 0 || !filteredAllHotels.value) {\r\n isNoHotel.value = true;\r\n }\r\n }\r\n\r\n // 16. 進階搜尋參數, 必須緩存Persist, router.afterEach會用到\r\n const advancedParams = ref({\r\n smoking: null,\r\n bedType: null,\r\n facilityArr: [],\r\n });\r\n\r\n // 17. 進階搜尋 SEE MORE 開關, 若被打開, 點進階搜尋, 必需仍是打開, 因此寫在Pinia, 也就是要吃全域的狀態\r\n const showAllBeds = ref(false);\r\n\r\n\r\n return { \r\n hotelSearch, \r\n recommandHotel, \r\n filteredAllHotels,\r\n totalKids,\r\n today,\r\n tomorrow,\r\n isNoHotel,\r\n skeletonLoading,\r\n advancedParams,\r\n showAllBeds,\r\n addRoom, \r\n removeRoom, \r\n addAdult, \r\n removeAdult, \r\n addChildWithBed, \r\n removeChildWithBed, \r\n addChildWithoutBed, \r\n removeChildWithoutBed, \r\n addAdults,\r\n minusAdults,\r\n addRooms,\r\n minusRooms,\r\n addKids_1to3,\r\n addKids_4to6,\r\n minusKids_1to3,\r\n minusKids_4to6,\r\n addBabyBoth,\r\n addBabyMeal,\r\n addBabyBed,\r\n addBabyNoBoth,\r\n minusBabyBoth,\r\n minusBabyMeal,\r\n minusBabyBed,\r\n minusBabyNoBoth,\r\n // updateFavorite,\r\n giveLoveFlag,\r\n updateDates,\r\n checkEmptyHotel,\r\n }\r\n\r\n}\r\n\r\n)\r\n","import axios from \"axios\";\r\nimport { AuthService } from \"./AuthService\";\r\nimport language from '@/assets/json/language.json';\r\nimport tagList from '@/assets/json/tagList.json';\r\nimport banner from '@/assets/json/banner.json';\r\nimport banner_Mobile from \"@/assets/json/banner_Mobile.json\";\r\nimport themeList from '@/assets/json/themeList.json';\r\nimport topDestinations from '@/assets/json/topDestinations.json';\r\nimport videoList from '@/assets/json/video.json';\r\nimport popularList from '@/assets/json/popularDestination.json';\r\nimport map from '@/assets/json/map.json';\r\nimport news from '@/assets/json/news.json';\r\nimport zagyosohList from '@/assets/json/Project-Zagyosoh.json';\r\nimport zagyosohList_Mobile from \"@/assets/json/Project-Zagyosoh-Mobile.json\";\r\nimport ikenotairaList from '@/assets/json/Project-Ikenotaira.json';\r\nimport ikenotairaList_Mobile from \"@/assets/json/Project-Ikenotaira-Mobile.json\";\r\nimport daytours from \"@/assets/json/daytours.json\";\r\n\r\nexport class SiteService {\r\n static createEquipmentInfo() {\r\n // 步驟 1: 生成 Canvas 指紋\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n ctx.textBaseline = \"top\";\r\n ctx.font = \"14px 'Arial'\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.fillStyle = \"#f60\";\r\n ctx.fillRect(125, 1, 62, 20);\r\n ctx.fillStyle = \"#069\";\r\n ctx.fillText(\"Hello, world!\", 2, 15);\r\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n ctx.fillText(\"Hello, world!\", 4, 17);\r\n const dataURL = canvas.toDataURL();\r\n \r\n // 步驟 2: 將指紋轉換為哈希值\r\n const hash = this.simpleHash(dataURL);\r\n \r\n // 步驟 3: 獲取當前的時間戳\r\n const timestamp = Date.now();\r\n \r\n // 步驟 4: 生成一個隨機字符串\r\n const randomString = this.generateRandomString(16);\r\n \r\n // 步驟 5: 將哈希值、時間戳和隨機字符串結合\r\n const combinedHash = this.simpleHash(hash.toString() + timestamp.toString() + randomString);\r\n \r\n // 步驟 6: 將結合後的哈希值轉換為32碼的短碼\r\n const shortCode = this.hashToShortCode(combinedHash, 30);\r\n \r\n return shortCode;\r\n }\r\n \r\n // 生成隨機字符串\r\n static generateRandomString(length) {\r\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let result = '';\r\n for (let i = 0; i < length; i++) {\r\n result += characters.charAt(Math.floor(Math.random() * characters.length));\r\n }\r\n return result;\r\n }\r\n \r\n // 將哈希值轉換為短碼\r\n static hashToShortCode(hash, codeLength) {\r\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\r\n let shortCode = '';\r\n \r\n // 使用位操作來確保hash的每一位都被充分利用\r\n for (let i = 0; i < codeLength; i++) {\r\n // 使用位操作來獲取hash的不同部分\r\n const index = (hash >> (i * 5) & 29) % characters.length;\r\n shortCode += characters.charAt(index);\r\n }\r\n \r\n return shortCode;\r\n }\r\n \r\n // 將指紋轉換為哈希值\r\n static simpleHash(str) {\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & 0xFFFFFFFF; // 確保hash始終是32位整數\r\n }\r\n return Math.abs(hash);\r\n }\r\n \r\n \r\n\r\n // TODO: get supported display languages from API\r\n static getSupportedLanguages() {\r\n // let accessToken = await AuthService.getAccessToken();\r\n // let dataURL =\r\n // process.env.VUE_APP_API_URL + `/api/V1/P02/A00/P02A00F001?Top=10&Skip=1`;\r\n // let response = await axios({\r\n // method: \"GET\",\r\n // url: dataURL,\r\n // responseType: \"json\",\r\n // headers: {\r\n // Authorization: accessToken,\r\n // },\r\n // })\r\n // .catch(function (error) {\r\n // console.log(error);\r\n // });\r\n // return response.data.Data.P01A00F001List;\r\n return language.Data.P01A00F001List;\r\n }\r\n\r\n // get user display languages\r\n static getUserDisplayLanguage() {\r\n const langObject = localStorage.getItem(\"displayLang\");\r\n if (langObject) {\r\n return langObject;\r\n } else {\r\n return \"ja-JP\";\r\n }\r\n }\r\n\r\n // update user display languages\r\n static updateUserDisplayLanguage(lang) {\r\n if (lang == undefined) {\r\n localStorage.setItem(\"displayLang\", \"ja-JP\");\r\n } else {\r\n localStorage.setItem(\"displayLang\", lang);\r\n }\r\n }\r\n // TODO: get tag list from API\r\n static getTagList() {\r\n return tagList.Data.P01A00F002List;\r\n }\r\n // TODO: get banner list from API\r\n static getBannerList(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return banner.Data.bannerList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return banner.Data.bannerList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return banner.Data.bannerList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return banner.Data.bannerList_jaJP;\r\n }\r\n }\r\n\r\n // 首頁Banner - 手機板\r\n static getBannerList_Mobile(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return banner_Mobile.Data.bannerList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return banner_Mobile.Data.bannerList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return banner_Mobile.Data.bannerList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return banner_Mobile.Data.bannerList_jaJP;\r\n }\r\n }\r\n\r\n // TODO: get theme list from API\r\n static getThemeList(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return themeList.Data.themeList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return themeList.Data.themeList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return themeList.Data.themeList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return themeList.Data.themeList_jaJP;\r\n }\r\n }\r\n // TODO: get top destinations from API\r\n static getTopDestinations(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return topDestinations.Data.topDesList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return topDestinations.Data.topDesList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return topDestinations.Data.topDesList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return topDestinations.Data.topDesList_jaJP;\r\n }\r\n }\r\n\r\n // TODO: get video list from API\r\n static getVideo() {\r\n return videoList.Data.list;\r\n }\r\n\r\n // TODO: get popular destinations from API\r\n static getPopularDestination(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return popularList.Data.PopularDestination_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return popularList.Data.PopularDestination_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return popularList.Data.PopularDestination_enUs;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return popularList.Data.PopularDestination_jaJP;\r\n }\r\n }\r\n\r\n // TODO: get map from API\r\n static getMap(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return map.Data.mapList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return map.Data.mapList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return map.Data.mapList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return map.Data.mapList_jaJP;\r\n }\r\n }\r\n \r\n // TODO: get news from API\r\n static getNews() {\r\n return news.Data.news;\r\n }\r\n // // confirm user agree cookie policy\r\n // static isUserAgreeCookiePolicy() {\r\n // const agreeObject = localStorage.getItem(\"agreeCookie\");\r\n // console.log(agreeObject);\r\n // if (agreeObject) {\r\n // return true;\r\n // } else {\r\n // return false;\r\n // }\r\n // }\r\n\r\n // // set user agree cookie policy\r\n // static setCookiePolicyAgree() {\r\n // localStorage.setItem(\"agreeCookie\", true);\r\n // }\r\n \r\n // TODO: get policy content from API\r\n static async getPolicyContent(lang) {\r\n let accessToken = await AuthService.getAccessToken();\r\n let dataURL =\r\n process.env.VUE_APP_API_URL + `/api/V1/P02/A05/A01/P02A05A01F007`;\r\n let response = await axios({\r\n method: \"GET\",\r\n url: dataURL,\r\n responseType: \"json\",\r\n headers: {\r\n Authorization: accessToken,\r\n },\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n });\r\n let privacyContents = response.data.Data.PrivacyList.filter(function (\r\n value\r\n ) {\r\n return value.Language == lang;\r\n });\r\n\r\n\r\n if (privacyContents.length > 0) {\r\n return privacyContents[0].Content;\r\n } else {\r\n return null;\r\n }\r\n }\r\n \r\n\r\n // 坐魚莊 四國語言 JSON圖檔URL\r\n static getZagyosohList(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return zagyosohList.Data.themeList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return zagyosohList.Data.themeList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return zagyosohList.Data.themeList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return zagyosohList.Data.themeList_jaJP;\r\n }\r\n }\r\n\r\n // 坐魚莊 四國語言 JSON圖檔URL - Mobile\r\n static getZagyosohList_Mobile(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return zagyosohList_Mobile.Data.themeList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return zagyosohList_Mobile.Data.themeList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return zagyosohList_Mobile.Data.themeList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return zagyosohList_Mobile.Data.themeList_jaJP;\r\n }\r\n }\r\n \r\n\r\n // 池之平 四國語言 JSON圖檔URL\r\n static getIkenotairaList(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return ikenotairaList.Data.themeList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return ikenotairaList.Data.themeList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return ikenotairaList.Data.themeList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return ikenotairaList.Data.themeList_jaJP;\r\n }\r\n }\r\n\r\n // 池之平 四國語言 JSON圖檔URL\r\n static getIkenotairaList_Mobile(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return ikenotairaList_Mobile.Data.themeList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return ikenotairaList_Mobile.Data.themeList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return ikenotairaList_Mobile.Data.themeList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return ikenotairaList_Mobile.Data.themeList_jaJP;\r\n }\r\n }\r\n\r\n // 一日遊 四國語言 JSON圖檔URL\r\n static getDaytours(langCode) {\r\n if (langCode == \"zh-TW\") {\r\n return daytours.Data.themeList_zhTW;\r\n } else if ( langCode == \"zh-CN\") {\r\n return daytours.Data.themeList_zhCN;\r\n } else if ( langCode == \"en-US\") {\r\n return daytours.Data.themeList_enUS;\r\n }\r\n else if ( langCode == \"ja-JP\") {\r\n return daytours.Data.themeList_jaJP;\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import { defineStore } from 'pinia'\r\nimport { ref, computed, reactive } from 'vue'\r\nimport { SiteService } from \"@/service/SiteService\";\r\nimport {CookieService} from '@/service/CookieService.js';\r\nimport axios from 'axios';\r\n\r\nexport const useSiteStore = defineStore('site', () => {\r\n const settings = reactive({\r\n languages: null,\r\n displayLanguages: SiteService.getUserDisplayLanguage(),\r\n tagList: SiteService.getTagList(),\r\n videoList: null,\r\n isCalendar: false,\r\n });\r\n\r\n const userInfo = ref(null);\r\n\r\n const searchCategories = ref(\"01\");\r\n\r\n const newsList = computed(() => {\r\n return SiteService.getNews();\r\n })\r\n\r\n const themeList = computed(() => {\r\n return SiteService.getThemeList(settings.displayLanguages)\r\n })\r\n\r\n const bannerList = computed(() => {\r\n return SiteService.getBannerList(settings.displayLanguages);\r\n })\r\n\r\n // 首頁Banner - 手機板\r\n const bannerList_Mobile = computed(() => {\r\n return SiteService.getBannerList_Mobile(settings.displayLanguages);\r\n })\r\n\r\n const topDestinations = computed(() => {\r\n return SiteService.getTopDestinations(settings.displayLanguages);\r\n })\r\n\r\n const popularData = computed(() => {\r\n return SiteService.getPopularDestination(settings.displayLanguages);\r\n })\r\n\r\n const mapData = computed(() => {\r\n return SiteService.getMap(settings.displayLanguages);\r\n })\r\n\r\n\r\n // get video list at intersection observer\r\n function getVideoList() {\r\n this.settings.videoList = SiteService.getVideo().slice(0, 18);\r\n }\r\n\r\n // update supported languages list\r\n function updateLanguages() {\r\n try {\r\n let langListData = SiteService.getSupportedLanguages();\r\n return this.settings.languages = langListData;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n // update display languages and set cookie\r\n function updateDisplayLanguages(langCode) {\r\n SiteService.updateUserDisplayLanguage(langCode);\r\n this.settings.displayLanguages = langCode;\r\n }\r\n\r\n // 坐漁莊四國語言圖片 - 桌機\r\n const zagyosohList = computed(() => {\r\n return SiteService.getZagyosohList(settings.displayLanguages)\r\n })\r\n\r\n // 坐漁莊四國語言圖片 - 手機\r\n const zagyosohList_Mobile = computed(() => {\r\n return SiteService.getZagyosohList_Mobile(settings.displayLanguages)\r\n })\r\n\r\n\r\n // 池之平四國語言圖片\r\n const ikenotairaList = computed(() => {\r\n return SiteService.getIkenotairaList(settings.displayLanguages)\r\n })\r\n\r\n // 池之平四國語言圖片\r\n const ikenotairaList_Mobile = computed(() => {\r\n return SiteService.getIkenotairaList_Mobile(settings.displayLanguages)\r\n })\r\n\r\n // 一日遊四國語言圖片\r\n const daytours = computed(() => {\r\n return SiteService.getDaytours(settings.displayLanguages)\r\n })\r\n\r\n function recordEquipmemt(siteStore, from, to, next) {\r\n const apiUrl = process.env.VUE_APP_API_URL + '/api/V1/P02/A06/A02/P02A06A02M004';\r\n let referralCode = CookieService.getItem(\"ReferralCode\");\r\n let equipmentNo = localStorage.getItem(\"ENO\") ?? '';\r\n if (to.query.Code && (referralCode == \"\" || referralCode == null || referralCode == undefined)) {\r\n referralCode = to.query.Code;\r\n const expirationDate = new Date();\r\n expirationDate.setDate(expirationDate.getDate() + 1);\r\n CookieService.setItem(\"ReferralCode\", referralCode, expirationDate, '/');\r\n }\r\n if (equipmentNo == \"\" || equipmentNo == null || equipmentNo == undefined) {\r\n equipmentNo = SiteService.createEquipmentInfo();\r\n localStorage.setItem(\"ENO\", equipmentNo);\r\n }\r\n const data = {\r\n userId: siteStore.userInfo?.Nbr ?? '',\r\n equipmentNo: equipmentNo ?? '',\r\n entryUrl: to.fullPath,\r\n referralCode: referralCode ?? '',\r\n };\r\n axios.post(apiUrl, data)\r\n .then(response => {\r\n //console.log('頁面訪問記錄成功發送');\r\n return;\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n console.error(from);\r\n });\r\n }\r\n\r\n return { recordEquipmemt, userInfo, settings, topDestinations, bannerList, themeList, popularData, searchCategories, mapData, updateLanguages, updateDisplayLanguages, getVideoList, newsList, zagyosohList, ikenotairaList, zagyosohList_Mobile, ikenotairaList_Mobile, bannerList_Mobile, daytours }\r\n},\r\n {\r\n persist: [\r\n {\r\n storage: localStorage,\r\n key: \"StorageUserInfo\",\r\n paths: [\"userInfo\"]\r\n },\r\n {\r\n // 語系, 用sessionStorage, 網頁若關閉, 下次進入只抓瀏覽器預設語言\r\n storage: sessionStorage,\r\n key: \"displayLang\",\r\n paths: [\"settings.displayLanguages\"]\r\n }\r\n ]\r\n })","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"159\":\"157c8a77\",\"274\":\"1926c75b\",\"466\":\"b4a49f6b\",\"537\":\"6cfc8094\",\"593\":\"0d37ce27\",\"633\":\"10f0c6b2\",\"714\":\"b2dd924d\",\"783\":\"2f65d8eb\",\"1541\":\"cbc0e6db\",\"1568\":\"9cdfc8d3\",\"1576\":\"ddefeb83\",\"1733\":\"a5df80a7\",\"1886\":\"66ad8df8\",\"2028\":\"a4b01518\",\"2061\":\"0fb2e708\",\"2168\":\"04ae5333\",\"2173\":\"e3aaf343\",\"2208\":\"f0b495d2\",\"2518\":\"761dc2ac\",\"2719\":\"fdd5e385\",\"2942\":\"c502325a\",\"3371\":\"637e1f07\",\"3529\":\"ea860b4c\",\"4381\":\"5ae063d9\",\"4472\":\"ee083391\",\"4650\":\"543cf72d\",\"4962\":\"4717561a\",\"5437\":\"029571ee\",\"5509\":\"82ce2834\",\"5736\":\"3cfeb617\",\"5827\":\"2e5b6afd\",\"6286\":\"fd6fac67\",\"6293\":\"2d27a0ff\",\"6299\":\"a50f3644\",\"6449\":\"a66ac456\",\"6530\":\"dfe08efe\",\"6569\":\"692d255b\",\"6724\":\"6b45fa4e\",\"6811\":\"def1ae78\",\"7107\":\"883c826b\",\"7276\":\"c5ea762e\",\"7476\":\"12b1fb00\",\"7733\":\"2a108bcb\",\"7914\":\"1b16f16b\",\"7990\":\"4bcd78db\",\"8014\":\"1597a9ed\",\"8019\":\"34f0f8b4\",\"8119\":\"48a17318\",\"8258\":\"846762d6\",\"8371\":\"c96f5d2f\",\"8404\":\"7fa1518b\",\"8435\":\"a36385bb\",\"8470\":\"7f4de02f\",\"8593\":\"ac08301b\",\"8851\":\"1d7bdbbb\",\"8883\":\"48d294b7\",\"8885\":\"fd371630\",\"9047\":\"ea9585fb\",\"9109\":\"5b994e61\",\"9334\":\"06563c62\",\"9393\":\"9f5d2b5f\",\"9466\":\"29c9c237\",\"9547\":\"02307c47\",\"9559\":\"38f8e30c\",\"9951\":\"869612d8\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"1541\":\"a7de55a2\",\"1568\":\"4b629864\",\"2168\":\"0ba74458\",\"2173\":\"429470a4\",\"2208\":\"d101041f\",\"2719\":\"2e03101b\",\"2942\":\"bda15417\",\"4472\":\"d4769331\",\"6293\":\"ad53c7fa\",\"6449\":\"fd47a770\",\"6724\":\"e769f1d7\",\"7107\":\"f5a550d3\",\"7476\":\"429470a4\",\"7990\":\"20ab85cb\",\"8019\":\"4cf7e4ef\",\"8258\":\"a7de55a2\",\"8371\":\"f70d2b02\",\"8470\":\"44d5fee3\",\"8593\":\"d90a5be2\",\"9047\":\"2e432f46\",\"9393\":\"5456db0b\",\"9547\":\"4866e821\",\"9559\":\"26d1f324\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"1541\":1,\"1568\":1,\"2168\":1,\"2173\":1,\"2208\":1,\"2719\":1,\"2942\":1,\"4472\":1,\"6293\":1,\"6449\":1,\"6724\":1,\"7107\":1,\"7476\":1,\"7990\":1,\"8019\":1,\"8258\":1,\"8371\":1,\"8470\":1,\"8593\":1,\"9047\":1,\"9393\":1,\"9547\":1,\"9559\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkseeyaplus\"] = self[\"webpackChunkseeyaplus\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4998], function() { return __webpack_require__(28019); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","locale","useI18n","route","useRoute","headerFooterType","computed","path","endsWith","startsWith","HeaderBar","defineAsyncComponent","FooterBar","HeaderBarBusiness","FooterBarBusiness","onMounted","document","documentElement","lang","value","watch","newLocale","pinia","createPinia","app","createApp","App","i18n","createI18n","legacy","messages","enUS","zhTW","zhCN","jaJP","fallbackLocale","component","InlineSvg","config","globalProperties","$filters","currency","num","parseInt","toFixed","replace","c","i","a","length","date","time","Date","toLocaleDateString","use","piniaPluginPersistedstate","Object","keys","AllRules","forEach","rule","defineRule","Field","Form","ErrorMessage","VueAxios","axios","VueSweetalert2","router","mount","routes","name","redirect","params","useSiteStore","settings","displayLanguages","sensitive","prop","meta","requiresAuth","keepAlive","beforeEnter","to","from","next","userInfo","IdentityType","go","siteStore","query","token","refreshToken","localStorage","setItem","jwtDecode","jwt","lastPage","getItem","apiUrl","process","referralCode","CookieService","equipmentNo","data","Nbr","email","Source","post","then","response","catch","error","removeItem","AuthService","getTicket","window","location","href","switchLang","Data","createRouter","history","createWebHistory","scrollBehavior","_from","savedPosition","hash","el","behavior","scrollTo","strict","beforeEach","async","authStore","useAuthStore","recordEquipmemt","checkToken","ticket","checkTicket","afterEach","hotelStore","useHotelStore","advancedParams","smoking","bedType","facilityArr","filteredAllHotels","HotelPriceRange","getAccessToken","loginGoogle","googleAuthUrl","navigator","userAgent","customUserAgent","open","loginFB","_defineProperty","encodeURIComponent","get","exp","now","accessToken","errorSwal","headers","status","URLSearchParams","Email","sKey","decodeURIComponent","cookie","RegExp","sValue","vEnd","sPath","sDomain","bSecure","test","sExpires","constructor","Number","Infinity","String","toUTCString","this","hasItem","aKeys","split","nIdx","defineStore","title","text","Swal","icon","confirmButtonText","ref","updateAccessToken","Token","logOut","useFavoriteStore","loveList","addMyLove","hotelCode","loveExisted","find","item","filter","index","unshift","persist","key","paths","HotelService","getRecommandHotel","langCode","hotel","today","formatDate","tomorrow","hotelSearch","reactive","destination","searchType","mealOption","rooms","adult","childWithBed","childWithoutBed","dateRange","dateStart","dateEnd","adults","room","kid_1to3","kid_4to6","babyWithBoth","babyWithMeal","babyWithBed","babyNoBoth","stayNights","recommandHotel","useRouter","isNoHotel","skeletonLoading","totalKids","d","month","getMonth","day","getDate","year","getFullYear","join","showAllBeds","addRoom","push","removeRoom","pop","addAdult","roomIndex","removeAdult","addChildWithBed","removeChildWithBed","addChildWithoutBed","removeChildWithoutBed","addAdults","minusAdults","addRooms","minusRooms","addKids_1to3","addKids_4to6","minusKids_1to3","minusKids_4to6","addBabyBoth","addBabyMeal","addBabyBed","addBabyNoBoth","minusBabyBoth","minusBabyMeal","minusBabyBed","minusBabyNoBoth","giveLoveFlag","hotels","map","loveFlag","updateDates","newCheckIn","newCheckout","checkEmptyHotel","HotelList","SiteService","createEquipmentInfo","canvas","createElement","ctx","getContext","textBaseline","font","fillStyle","fillRect","fillText","dataURL","toDataURL","simpleHash","timestamp","randomString","generateRandomString","combinedHash","toString","hashToShortCode","characters","result","charAt","Math","floor","random","codeLength","shortCode","str","charCodeAt","abs","getSupportedLanguages","language","getUserDisplayLanguage","langObject","updateUserDisplayLanguage","undefined","getTagList","tagList","getBannerList","banner","getBannerList_Mobile","banner_Mobile","getThemeList","themeList","getTopDestinations","topDestinations","getVideo","videoList","getPopularDestination","popularList","getMap","getNews","news","getPolicyContent","privacyContents","method","url","responseType","Authorization","PrivacyList","Language","Content","getZagyosohList","zagyosohList","getZagyosohList_Mobile","zagyosohList_Mobile","getIkenotairaList","ikenotairaList","getIkenotairaList_Mobile","ikenotairaList_Mobile","getDaytours","daytours","languages","isCalendar","searchCategories","newsList","bannerList","bannerList_Mobile","popularData","mapData","Code","expirationDate","setDate","userId","entryUrl","fullPath","updateLanguages","langListData","updateDisplayLanguages","getVideoList","slice","storage","sessionStorage","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","id","loaded","__webpack_modules__","call","m","amdO","O","chunkIds","fn","priority","notFulfilled","fulfilled","j","every","splice","r","n","getter","__esModule","definition","o","defineProperty","enumerable","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","hmd","create","children","set","Error","obj","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","p","loadStylesheet","resolve","reject","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","err","code","request","insertBefore","nextSibling","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","promise","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}