zhengjinyi 8 月之前
父节点
当前提交
c820439d28
共有 100 个文件被更改,包括 4070 次插入0 次删除
  1. 212 0
      .nuxt/App.js
  2. 820 0
      .nuxt/client.js
  3. 33 0
      .nuxt/components/index.js
  4. 143 0
      .nuxt/components/nuxt-build-indicator.vue
  5. 122 0
      .nuxt/components/nuxt-child.js
  6. 98 0
      .nuxt/components/nuxt-error.vue
  7. 98 0
      .nuxt/components/nuxt-link.client.js
  8. 16 0
      .nuxt/components/nuxt-link.server.js
  9. 177 0
      .nuxt/components/nuxt-loading.vue
  10. 101 0
      .nuxt/components/nuxt.js
  11. 7 0
      .nuxt/components/plugin.js
  12. 10 0
      .nuxt/components/readme.md
  13. 1 0
      .nuxt/empty.js
  14. 224 0
      .nuxt/index.js
  15. 82 0
      .nuxt/jsonp.js
  16. 110 0
      .nuxt/loading.html
  17. 3 0
      .nuxt/middleware.js
  18. 90 0
      .nuxt/mixins/fetch.client.js
  19. 69 0
      .nuxt/mixins/fetch.server.js
  20. 273 0
      .nuxt/router.js
  21. 76 0
      .nuxt/router.scrollBehavior.js
  22. 347 0
      .nuxt/routes.json
  23. 288 0
      .nuxt/server.js
  24. 630 0
      .nuxt/utils.js
  25. 8 0
      .nuxt/vetur/tags.json
  26. 9 0
      .nuxt/views/app.template.html
  27. 23 0
      .nuxt/views/error.html
  28. 二进制
      node_modules/.cache/babel-loader/0387792f4d384416560f7e358dc7ba821f4f8edb810d360314db52e1eabad7f6.json.gz
  29. 二进制
      node_modules/.cache/babel-loader/039368a4ad9a575b880c0aeeda39353ffeb328317d8ff447881205514280b8d9.json.gz
  30. 二进制
      node_modules/.cache/babel-loader/0463fcdfcee53f864996f9f6cbc5c906d037f872454bb45e9bccbd893af7a676.json.gz
  31. 二进制
      node_modules/.cache/babel-loader/050af38993e4bc7fd1ee656ee1114487681810b50f53ddfe0d0c08aab8e26ca9.json.gz
  32. 二进制
      node_modules/.cache/babel-loader/06fcbf0e1918764e94b62f5dd3bfa5ad9985043c7e3ecfb7c739752d4280eb7d.json.gz
  33. 二进制
      node_modules/.cache/babel-loader/072c2901b5b095625a8979ecda8f160e79a31d5cb53af28812a04306490b4b8f.json.gz
  34. 二进制
      node_modules/.cache/babel-loader/0ab7d6688781ef8055b2c88116bffb67535f624054ecccddd393785566aa4d92.json.gz
  35. 二进制
      node_modules/.cache/babel-loader/0c43389055476ee9761b591c2a2e5d7b841274d8fb796b51d57f93028b36f802.json.gz
  36. 二进制
      node_modules/.cache/babel-loader/0e91345eba2a938d3c5d36e77ab24627896a944859ee3ba654c2bfc0961634c2.json.gz
  37. 二进制
      node_modules/.cache/babel-loader/0eb7920067297f44053e72da2699101d69e668db064ba61d0867863a70d15be8.json.gz
  38. 二进制
      node_modules/.cache/babel-loader/0fd28f4c38ede053dd5a87d2a3f02c7b96d4a9864ee24daa3f7bc5570642d4a4.json.gz
  39. 二进制
      node_modules/.cache/babel-loader/102a6ae056b2667681b36072f43e0ed23d64ca92c4ccf6984b7506e14d821b74.json.gz
  40. 二进制
      node_modules/.cache/babel-loader/106e28c87ea17a29d2cd1e9d7ce8bdcde18f809b978c47d68787557f8cfbcfab.json.gz
  41. 二进制
      node_modules/.cache/babel-loader/1125b6988292c1c6db5e889815148dd147dfed148a755a18a500872737f92b32.json.gz
  42. 二进制
      node_modules/.cache/babel-loader/129e88ee106c5caace4de66771773638457604da1edda819a801dd2d35408f2c.json.gz
  43. 二进制
      node_modules/.cache/babel-loader/13022130bcc51c0701994321ab7938c7eadd8f3d528d28ebea6c95c43de31454.json.gz
  44. 二进制
      node_modules/.cache/babel-loader/13ccdad5f4c35181a3d67f903aa72fdd3876118dd2a6fc392ca683a482bfefb7.json.gz
  45. 二进制
      node_modules/.cache/babel-loader/140652aa8e7f2bdb947ea9e84c95a2c9f20ec1fb6e34a20ee840674825db6685.json.gz
  46. 二进制
      node_modules/.cache/babel-loader/14340a44c9f15ffec68896bfda83082b3e174865eb823b98e8848166c91aecdd.json.gz
  47. 二进制
      node_modules/.cache/babel-loader/14601e6e3a0fe76714be6bddafd5a80ae922d5475c7bc323ab520b9c08554d86.json.gz
  48. 二进制
      node_modules/.cache/babel-loader/1514597c7a120070a0a72536ad6a145d1a216bd88bac75cabc9c1fecf17ed810.json.gz
  49. 二进制
      node_modules/.cache/babel-loader/15331127254f49e0b75304118c05e435c4894772b3e220f042685695b4a7cbfe.json.gz
  50. 二进制
      node_modules/.cache/babel-loader/1b42c183cbe38d3fedc555aedfa65550c815be58e82d0e1751147e648343fc7a.json.gz
  51. 二进制
      node_modules/.cache/babel-loader/1bf32249ae2b6578526f9208dc793f4475b3f8024e17514933fb25b10baa3d7c.json.gz
  52. 二进制
      node_modules/.cache/babel-loader/1c4dcfbeccc1c3fa6739a373bb9a6f70047eb7386bef022049fcd2b521d16050.json.gz
  53. 二进制
      node_modules/.cache/babel-loader/1d28018eb20159ae4e13552f9cb1360cdab5c1169c2cd027fd76cbeda9f2a003.json.gz
  54. 二进制
      node_modules/.cache/babel-loader/1e0bbe96af2aa399e5259127f619f96744e54d07483dfe8aaceca7ce60b7532a.json.gz
  55. 二进制
      node_modules/.cache/babel-loader/1ec0b84f906feb3aaf1fd69ed44f990a9f3d45921f6af3598fa394f420fd50d0.json.gz
  56. 二进制
      node_modules/.cache/babel-loader/1f85390ded4a60abde40fa9aea4394d817c0cdf9da225c62749478094e2e0f77.json.gz
  57. 二进制
      node_modules/.cache/babel-loader/20b1ee02787ce9df71f9a79b4b8733aa38fedcb44d6918a71813b36b25e93e6d.json.gz
  58. 二进制
      node_modules/.cache/babel-loader/25130f97f5654cf96df8faf6be1c5ea5b5df77082ec64a831206b95c17f423d4.json.gz
  59. 二进制
      node_modules/.cache/babel-loader/25958d9c3fcad67dcfea3e6cf431d8b8fb5dd2de1466ffc8320b2f8bf77c034e.json.gz
  60. 二进制
      node_modules/.cache/babel-loader/2868fc19b2552dd0f2439daeb1bdd2ab999ada06858b736550c80c0f7c579370.json.gz
  61. 二进制
      node_modules/.cache/babel-loader/29b35e517ce7925f962b7bf0061d2bec959a4e0b4badef9c2431ddc6c692d8dd.json.gz
  62. 二进制
      node_modules/.cache/babel-loader/2d35b715176fa22b2e317437c0b743ef01f50beb1e27f233f034c233ab618a6b.json.gz
  63. 二进制
      node_modules/.cache/babel-loader/2dbd4e5bdaf181651e507dc299b57633b1b2eb5b65a5c8e2b5717ec6979af15a.json.gz
  64. 二进制
      node_modules/.cache/babel-loader/2ec27ad3ce9c7bbaaba22129f7317ab2d09f3e016eb75b4018e739d981084108.json.gz
  65. 二进制
      node_modules/.cache/babel-loader/2fd57de87628f1dfbfcf2518fe3afb892522ab0afdf50d5b43c34dc9289cdea1.json.gz
  66. 二进制
      node_modules/.cache/babel-loader/30967d052b30e6c8ec023883be3616bc6c8e7492949fe757bb9875c791e8c080.json.gz
  67. 二进制
      node_modules/.cache/babel-loader/31a453432740599dcd20ff5d6f8e2d255eb0a5800e1004c866b34b40995a95f3.json.gz
  68. 二进制
      node_modules/.cache/babel-loader/3409d254d61dc7a1cf682072c0b522e9a520d105db4ef20cf76c66e9ded4953b.json.gz
  69. 二进制
      node_modules/.cache/babel-loader/3635339a948bda5bdfe56184e43624fc9ae19d0ad93fceb9a24577827205c991.json.gz
  70. 二进制
      node_modules/.cache/babel-loader/3a939aaf7a764ff485e70720d9da2ae034bf6855835baff766aa150f845265c3.json.gz
  71. 二进制
      node_modules/.cache/babel-loader/3effcc03aa15763631ae599998eff8882a62dad9736ec8ba10294f3e7a3c1ccc.json.gz
  72. 二进制
      node_modules/.cache/babel-loader/3f49efa8f3b5d02d7ba285d58a2bcfa6b043900870c641b2b557fd0f5306c91f.json.gz
  73. 二进制
      node_modules/.cache/babel-loader/42780c7055786073fcf03604d9fb5b8865fa13c36bf52f921f221caa47ce7c53.json.gz
  74. 二进制
      node_modules/.cache/babel-loader/46851989b7b56934660573f8a34b8dd78cff40c982720e66c557d1bba6c8653d.json.gz
  75. 二进制
      node_modules/.cache/babel-loader/4700edf6cf529c4089e667634179958ef1a694f132b39334ff51ad81f8ed70aa.json.gz
  76. 二进制
      node_modules/.cache/babel-loader/471d865c7dce6142f88a8e524c47512766c31183309aa8d56c4e89191a4f34c8.json.gz
  77. 二进制
      node_modules/.cache/babel-loader/4aba121fcf08ab121f59ace7673150adf40cb44032c18da0a2d17dbd324d2f09.json.gz
  78. 二进制
      node_modules/.cache/babel-loader/4bbe59ecd44e16ead8f13d13826adc90071e731462bdadc6e84cebc6b695dbed.json.gz
  79. 二进制
      node_modules/.cache/babel-loader/4e1b601a3a0bb7ea0494cbf841a2416cb090a422b108c0c03dea78b9693659d5.json.gz
  80. 二进制
      node_modules/.cache/babel-loader/59aaedb16febdec230f963b2dbfa52b95e476d690da5e276a4fb3f0a8bc6a0b3.json.gz
  81. 二进制
      node_modules/.cache/babel-loader/5ae755eba4c7d7778c94bf98f725b80c997748c3b38d91e02983ce4e145939ec.json.gz
  82. 二进制
      node_modules/.cache/babel-loader/5ca044f91944c2b78cf924004003cd743210fd23f076a3ad1a3826178a8d3660.json.gz
  83. 二进制
      node_modules/.cache/babel-loader/5d41358e1986d4b4ada685ca4289515da882a0d887bc3795b5b97861d02107ff.json.gz
  84. 二进制
      node_modules/.cache/babel-loader/5ef524f37c141c8ac8584b264567c59410befb0d626f0b47eb77ee3fd3d09c73.json.gz
  85. 二进制
      node_modules/.cache/babel-loader/5fc737bfee4615a89af558e649175752f61545601310c78bb73046b99d8d6dd2.json.gz
  86. 二进制
      node_modules/.cache/babel-loader/60f083f3a6cfd93d01e63bf9cfb6e0144bc4ffa3de77bb33f71a4e7ad2f01aca.json.gz
  87. 二进制
      node_modules/.cache/babel-loader/6239ed641759ca51266f5e6f8f590564c739a1605ec82e7b11a8ba7f430be97d.json.gz
  88. 二进制
      node_modules/.cache/babel-loader/6269e7b64095b505742884e3c990d49ee5ab5cc8137a4058deff24f8558da219.json.gz
  89. 二进制
      node_modules/.cache/babel-loader/65f2836be53dcaa72e3cf5486cddc626049c5c854c0becbebe9272e60c8d61df.json.gz
  90. 二进制
      node_modules/.cache/babel-loader/66f4a5bded281b3bcdd9e56b6f4ede2e44f7fda82de379d933aebd5fe70cad39.json.gz
  91. 二进制
      node_modules/.cache/babel-loader/671628da6eaa67fd9970aca10e39d9dcbdb8709361556ddcae59c7c0151c6b9a.json.gz
  92. 二进制
      node_modules/.cache/babel-loader/67206bf2ca4d2b2e22c68f88c2191b838db27e5b89e6ef61235ef78e7b2b5580.json.gz
  93. 二进制
      node_modules/.cache/babel-loader/6c20b3f6d9b639028124f2d257ae47c91b54e923029a222d2a50b548d38dae42.json.gz
  94. 二进制
      node_modules/.cache/babel-loader/6d0b21a259379a06a09b24a90c42c1019a3daff3e2771c2ac96951f3a1ca1893.json.gz
  95. 二进制
      node_modules/.cache/babel-loader/71a143102c987bc5c534da899b7bb035af6df135e50d950cb6ba9ba82a9f6044.json.gz
  96. 二进制
      node_modules/.cache/babel-loader/74eab73a11330368509fa6fbac34b37e14a961826ee36a44d5d271ec3011473f.json.gz
  97. 二进制
      node_modules/.cache/babel-loader/75feb3410654b4a83635cb9d04606a57d35fa5b202ea94d67b55ccafe1fe5d21.json.gz
  98. 二进制
      node_modules/.cache/babel-loader/7659ab3b29c0413e6015ef500778d63b1afcd07c5f9567f9c817ec643a1c1617.json.gz
  99. 二进制
      node_modules/.cache/babel-loader/77931d815fb6b46c81ddee6d4e469d9041147b8219d552635926efcd75a4b74a.json.gz
  100. 二进制
      node_modules/.cache/babel-loader/77a1b48f8e5d039f83798766e9beab2bbb18af1353003a900b57d3c1ad42a067.json.gz

+ 212 - 0
.nuxt/App.js

@@ -0,0 +1,212 @@
+import Vue from 'vue'
+import { decode, parsePath, withoutBase, withoutTrailingSlash, normalizeURL } from 'ufo'
+
+import { getMatchedComponentsInstances, getChildrenComponentInstancesUsingFetch, promisify, globalHandleError, urlJoin, sanitizeComponent } from './utils'
+import NuxtError from './components/nuxt-error.vue'
+import NuxtLoading from './components/nuxt-loading.vue'
+import NuxtBuildIndicator from './components/nuxt-build-indicator'
+
+import '..\\assets\\css\\normalize.css'
+
+import '..\\assets\\css\\base.scss'
+
+import _6f6c098b from '..\\layouts\\default.vue'
+
+const layouts = { "_default": sanitizeComponent(_6f6c098b) }
+
+export default {
+  render (h, props) {
+    const loadingEl = h('NuxtLoading', { ref: 'loading' })
+
+    const layoutEl = h(this.layout || 'nuxt')
+    const templateEl = h('div', {
+      domProps: {
+        id: '__layout'
+      },
+      key: this.layoutName
+    }, [layoutEl])
+
+    const transitionEl = h('transition', {
+      props: {
+        name: 'layout',
+        mode: 'out-in'
+      },
+      on: {
+        beforeEnter (el) {
+          // Ensure to trigger scroll event after calling scrollBehavior
+          window.$nuxt.$nextTick(() => {
+            window.$nuxt.$emit('triggerScroll')
+          })
+        }
+      }
+    }, [templateEl])
+
+    return h('div', {
+      domProps: {
+        id: '__nuxt'
+      }
+    }, [
+      loadingEl,
+      h(NuxtBuildIndicator),
+      transitionEl
+    ])
+  },
+
+  data: () => ({
+    isOnline: true,
+
+    layout: null,
+    layoutName: '',
+
+    nbFetching: 0
+    }),
+
+  beforeCreate () {
+    Vue.util.defineReactive(this, 'nuxt', this.$options.nuxt)
+  },
+  created () {
+    // Add this.$nuxt in child instances
+    this.$root.$options.$nuxt = this
+
+    if (process.client) {
+      // add to window so we can listen when ready
+      window.$nuxt = this
+
+      this.refreshOnlineStatus()
+      // Setup the listeners
+      window.addEventListener('online', this.refreshOnlineStatus)
+      window.addEventListener('offline', this.refreshOnlineStatus)
+    }
+    // Add $nuxt.error()
+    this.error = this.nuxt.error
+    // Add $nuxt.context
+    this.context = this.$options.context
+  },
+
+  async mounted () {
+    this.$loading = this.$refs.loading
+  },
+
+  watch: {
+    'nuxt.err': 'errorChanged'
+  },
+
+  computed: {
+    isOffline () {
+      return !this.isOnline
+    },
+
+    isFetching () {
+      return this.nbFetching > 0
+    },
+
+    isPreview () {
+      return Boolean(this.$options.previewData)
+    },
+  },
+
+  methods: {
+    refreshOnlineStatus () {
+      if (process.client) {
+        if (typeof window.navigator.onLine === 'undefined') {
+          // If the browser doesn't support connection status reports
+          // assume that we are online because most apps' only react
+          // when they now that the connection has been interrupted
+          this.isOnline = true
+        } else {
+          this.isOnline = window.navigator.onLine
+        }
+      }
+    },
+
+    async refresh () {
+      const pages = getMatchedComponentsInstances(this.$route)
+
+      if (!pages.length) {
+        return
+      }
+      this.$loading.start()
+
+      const promises = pages.map((page) => {
+        const p = []
+
+        // Old fetch
+        if (page.$options.fetch && page.$options.fetch.length) {
+          p.push(promisify(page.$options.fetch, this.context))
+        }
+        if (page.$fetch) {
+          p.push(page.$fetch())
+        } else {
+          // Get all component instance to call $fetch
+          for (const component of getChildrenComponentInstancesUsingFetch(page.$vnode.componentInstance)) {
+            p.push(component.$fetch())
+          }
+        }
+
+        if (page.$options.asyncData) {
+          p.push(
+            promisify(page.$options.asyncData, this.context)
+              .then((newData) => {
+                for (const key in newData) {
+                  Vue.set(page.$data, key, newData[key])
+                }
+              })
+          )
+        }
+
+        return Promise.all(p)
+      })
+      try {
+        await Promise.all(promises)
+      } catch (error) {
+        this.$loading.fail(error)
+        globalHandleError(error)
+        this.error(error)
+      }
+      this.$loading.finish()
+    },
+    errorChanged () {
+      if (this.nuxt.err) {
+        if (this.$loading) {
+          if (this.$loading.fail) {
+            this.$loading.fail(this.nuxt.err)
+          }
+          if (this.$loading.finish) {
+            this.$loading.finish()
+          }
+        }
+
+        let errorLayout = (NuxtError.options || NuxtError).layout;
+
+        if (typeof errorLayout === 'function') {
+          errorLayout = errorLayout(this.context)
+        }
+
+        this.setLayout(errorLayout)
+      }
+    },
+
+    setLayout (layout) {
+      if(layout && typeof layout !== 'string') {
+        throw new Error('[nuxt] Avoid using non-string value as layout property.')
+      }
+
+      if (!layout || !layouts['_' + layout]) {
+        layout = 'default'
+      }
+      this.layoutName = layout
+      this.layout = layouts['_' + layout]
+      return this.layout
+    },
+    loadLayout (layout) {
+      if (!layout || !layouts['_' + layout]) {
+        layout = 'default'
+      }
+      return Promise.resolve(layouts['_' + layout])
+    },
+  },
+
+  components: {
+    NuxtLoading
+  }
+}

+ 820 - 0
.nuxt/client.js

@@ -0,0 +1,820 @@
+import Vue from 'vue'
+import fetch from 'unfetch'
+import middleware from './middleware.js'
+import {
+  applyAsyncData,
+  promisify,
+  middlewareSeries,
+  sanitizeComponent,
+  resolveRouteComponents,
+  getMatchedComponents,
+  getMatchedComponentsInstances,
+  flatMapComponents,
+  setContext,
+  getLocation,
+  compile,
+  getQueryDiff,
+  globalHandleError,
+  isSamePath,
+  urlJoin
+} from './utils.js'
+import { createApp, NuxtError } from './index.js'
+import fetchMixin from './mixins/fetch.client'
+import NuxtLink from './components/nuxt-link.client.js' // should be included after ./index.js
+
+// Fetch mixin
+if (!Vue.__nuxt__fetch__mixin__) {
+  Vue.mixin(fetchMixin)
+  Vue.__nuxt__fetch__mixin__ = true
+}
+
+// Component: <NuxtLink>
+Vue.component(NuxtLink.name, NuxtLink)
+Vue.component('NLink', NuxtLink)
+
+if (!global.fetch) { global.fetch = fetch }
+
+// Global shared references
+let _lastPaths = []
+let app
+let router
+
+// Try to rehydrate SSR data from window
+const NUXT = window.__NUXT__ || {}
+
+const $config = NUXT.config || {}
+if ($config._app) {
+  __webpack_public_path__ = urlJoin($config._app.cdnURL, $config._app.assetsPath)
+}
+
+Object.assign(Vue.config, {"silent":false,"performance":true})
+
+const logs = NUXT.logs || []
+  if (logs.length > 0) {
+  const ssrLogStyle = 'background: #2E495E;border-radius: 0.5em;color: white;font-weight: bold;padding: 2px 0.5em;'
+  console.group && console.group ('%cNuxt SSR', ssrLogStyle)
+  logs.forEach(logObj => (console[logObj.type] || console.log)(...logObj.args))
+  delete NUXT.logs
+  console.groupEnd && console.groupEnd()
+}
+
+// Setup global Vue error handler
+if (!Vue.config.$nuxt) {
+  const defaultErrorHandler = Vue.config.errorHandler
+  Vue.config.errorHandler = async (err, vm, info, ...rest) => {
+    // Call other handler if exist
+    let handled = null
+    if (typeof defaultErrorHandler === 'function') {
+      handled = defaultErrorHandler(err, vm, info, ...rest)
+    }
+    if (handled === true) {
+      return handled
+    }
+
+    if (vm && vm.$root) {
+      const nuxtApp = Object.keys(Vue.config.$nuxt)
+        .find(nuxtInstance => vm.$root[nuxtInstance])
+
+      // Show Nuxt Error Page
+      if (nuxtApp && vm.$root[nuxtApp].error && info !== 'render function') {
+        const currentApp = vm.$root[nuxtApp]
+
+        // Load error layout
+        let layout = (NuxtError.options || NuxtError).layout
+        if (typeof layout === 'function') {
+          layout = layout(currentApp.context)
+        }
+        if (layout) {
+          await currentApp.loadLayout(layout).catch(() => {})
+        }
+        currentApp.setLayout(layout)
+
+        currentApp.error(err)
+      }
+    }
+
+    if (typeof defaultErrorHandler === 'function') {
+      return handled
+    }
+
+    // Log to console
+    if (process.env.NODE_ENV !== 'production') {
+      console.error(err)
+    } else {
+      console.error(err.message || err)
+    }
+  }
+  Vue.config.$nuxt = {}
+}
+Vue.config.$nuxt.$nuxt = true
+
+const errorHandler = Vue.config.errorHandler || console.error
+
+// Create and mount App
+createApp(null, NUXT.config).then(mountApp).catch(errorHandler)
+
+function componentOption (component, key, ...args) {
+  if (!component || !component.options || !component.options[key]) {
+    return {}
+  }
+  const option = component.options[key]
+  if (typeof option === 'function') {
+    return option(...args)
+  }
+  return option
+}
+
+function mapTransitions (toComponents, to, from) {
+  const componentTransitions = (component) => {
+    const transition = componentOption(component, 'transition', to, from) || {}
+    return (typeof transition === 'string' ? { name: transition } : transition)
+  }
+
+  const fromComponents = from ? getMatchedComponents(from) : []
+  const maxDepth = Math.max(toComponents.length, fromComponents.length)
+
+  const mergedTransitions = []
+  for (let i=0; i<maxDepth; i++) {
+    // Clone original objects to prevent overrides
+    const toTransitions = Object.assign({}, componentTransitions(toComponents[i]))
+    const transitions = Object.assign({}, componentTransitions(fromComponents[i]))
+
+    // Combine transitions & prefer `leave` properties of "from" route
+    Object.keys(toTransitions)
+        .filter(key => typeof toTransitions[key] !== 'undefined' && !key.toLowerCase().includes('leave'))
+        .forEach((key) => { transitions[key] = toTransitions[key] })
+
+    mergedTransitions.push(transitions)
+  }
+  return mergedTransitions
+}
+
+async function loadAsyncComponents (to, from, next) {
+  // Check if route changed (this._routeChanged), only if the page is not an error (for validate())
+  this._routeChanged = Boolean(app.nuxt.err) || from.name !== to.name
+  this._paramChanged = !this._routeChanged && from.path !== to.path
+  this._queryChanged = !this._paramChanged && from.fullPath !== to.fullPath
+  this._diffQuery = (this._queryChanged ? getQueryDiff(to.query, from.query) : [])
+
+  if ((this._routeChanged || this._paramChanged) && this.$loading.start && !this.$loading.manual) {
+    this.$loading.start()
+  }
+
+  try {
+    if (this._queryChanged) {
+      const Components = await resolveRouteComponents(
+        to,
+        (Component, instance) => ({ Component, instance })
+      )
+      // Add a marker on each component that it needs to refresh or not
+      const startLoader = Components.some(({ Component, instance }) => {
+        const watchQuery = Component.options.watchQuery
+        if (watchQuery === true) {
+          return true
+        }
+        if (Array.isArray(watchQuery)) {
+          return watchQuery.some(key => this._diffQuery[key])
+        }
+        if (typeof watchQuery === 'function') {
+          return watchQuery.apply(instance, [to.query, from.query])
+        }
+        return false
+      })
+
+      if (startLoader && this.$loading.start && !this.$loading.manual) {
+        this.$loading.start()
+      }
+    }
+    // Call next()
+    next()
+  } catch (error) {
+    const err = error || {}
+    const statusCode = err.statusCode || err.status || (err.response && err.response.status) || 500
+    const message = err.message || ''
+
+    // Handle chunk loading errors
+    // This may be due to a new deployment or a network problem
+    if (/^Loading( CSS)? chunk (\d)+ failed\./.test(message)) {
+      window.location.reload(true /* skip cache */)
+      return // prevent error page blinking for user
+    }
+
+    this.error({ statusCode, message })
+    this.$nuxt.$emit('routeChanged', to, from, err)
+    next()
+  }
+}
+
+function applySSRData (Component, ssrData) {
+  if (NUXT.serverRendered && ssrData) {
+    applyAsyncData(Component, ssrData)
+  }
+
+  Component._Ctor = Component
+  return Component
+}
+
+// Get matched components
+function resolveComponents (route) {
+  return flatMapComponents(route, async (Component, _, match, key, index) => {
+    // If component is not resolved yet, resolve it
+    if (typeof Component === 'function' && !Component.options) {
+      Component = await Component()
+    }
+    // Sanitize it and save it
+    const _Component = applySSRData(sanitizeComponent(Component), NUXT.data ? NUXT.data[index] : null)
+    match.components[key] = _Component
+    return _Component
+  })
+}
+
+function callMiddleware (Components, context, layout) {
+  let midd = []
+  let unknownMiddleware = false
+
+  // If layout is undefined, only call global middleware
+  if (typeof layout !== 'undefined') {
+    midd = [] // Exclude global middleware if layout defined (already called before)
+    layout = sanitizeComponent(layout)
+    if (layout.options.middleware) {
+      midd = midd.concat(layout.options.middleware)
+    }
+    Components.forEach((Component) => {
+      if (Component.options.middleware) {
+        midd = midd.concat(Component.options.middleware)
+      }
+    })
+  }
+
+  midd = midd.map((name) => {
+    if (typeof name === 'function') {
+      return name
+    }
+    if (typeof middleware[name] !== 'function') {
+      unknownMiddleware = true
+      this.error({ statusCode: 500, message: 'Unknown middleware ' + name })
+    }
+    return middleware[name]
+  })
+
+  if (unknownMiddleware) {
+    return
+  }
+  return middlewareSeries(midd, context)
+}
+
+async function render (to, from, next) {
+  if (this._routeChanged === false && this._paramChanged === false && this._queryChanged === false) {
+    return next()
+  }
+  // Handle first render on SPA mode
+  let spaFallback = false
+  if (to === from) {
+    _lastPaths = []
+    spaFallback = true
+  } else {
+    const fromMatches = []
+    _lastPaths = getMatchedComponents(from, fromMatches).map((Component, i) => {
+      return compile(from.matched[fromMatches[i]].path)(from.params)
+    })
+  }
+
+  // nextCalled is true when redirected
+  let nextCalled = false
+  const _next = (path) => {
+    if (from.path === path.path && this.$loading.finish) {
+      this.$loading.finish()
+    }
+
+    if (from.path !== path.path && this.$loading.pause) {
+      this.$loading.pause()
+    }
+
+    if (nextCalled) {
+      return
+    }
+
+    nextCalled = true
+    next(path)
+  }
+
+  // Update context
+  await setContext(app, {
+    route: to,
+    from,
+    next: _next.bind(this)
+  })
+  this._dateLastError = app.nuxt.dateErr
+  this._hadError = Boolean(app.nuxt.err)
+
+  // Get route's matched components
+  const matches = []
+  const Components = getMatchedComponents(to, matches)
+
+  // If no Components matched, generate 404
+  if (!Components.length) {
+    // Default layout
+    await callMiddleware.call(this, Components, app.context)
+    if (nextCalled) {
+      return
+    }
+
+    // Load layout for error page
+    const errorLayout = (NuxtError.options || NuxtError).layout
+    const layout = await this.loadLayout(
+      typeof errorLayout === 'function'
+        ? errorLayout.call(NuxtError, app.context)
+        : errorLayout
+    )
+
+    await callMiddleware.call(this, Components, app.context, layout)
+    if (nextCalled) {
+      return
+    }
+
+    // Show error page
+    app.context.error({ statusCode: 404, message: 'This page could not be found' })
+    return next()
+  }
+
+  // Update ._data and other properties if hot reloaded
+  Components.forEach((Component) => {
+    if (Component._Ctor && Component._Ctor.options) {
+      Component.options.asyncData = Component._Ctor.options.asyncData
+      Component.options.fetch = Component._Ctor.options.fetch
+    }
+  })
+
+  // Apply transitions
+  this.setTransitions(mapTransitions(Components, to, from))
+
+  try {
+    // Call middleware
+    await callMiddleware.call(this, Components, app.context)
+    if (nextCalled) {
+      return
+    }
+    if (app.context._errored) {
+      return next()
+    }
+
+    // Set layout
+    let layout = Components[0].options.layout
+    if (typeof layout === 'function') {
+      layout = layout(app.context)
+    }
+    layout = await this.loadLayout(layout)
+
+    // Call middleware for layout
+    await callMiddleware.call(this, Components, app.context, layout)
+    if (nextCalled) {
+      return
+    }
+    if (app.context._errored) {
+      return next()
+    }
+
+    // Call .validate()
+    let isValid = true
+    try {
+      for (const Component of Components) {
+        if (typeof Component.options.validate !== 'function') {
+          continue
+        }
+
+        isValid = await Component.options.validate(app.context)
+
+        if (!isValid) {
+          break
+        }
+      }
+    } catch (validationError) {
+      // ...If .validate() threw an error
+      this.error({
+        statusCode: validationError.statusCode || '500',
+        message: validationError.message
+      })
+      return next()
+    }
+
+    // ...If .validate() returned false
+    if (!isValid) {
+      this.error({ statusCode: 404, message: 'This page could not be found' })
+      return next()
+    }
+
+    let instances
+    // Call asyncData & fetch hooks on components matched by the route.
+    await Promise.all(Components.map(async (Component, i) => {
+      // Check if only children route changed
+      Component._path = compile(to.matched[matches[i]].path)(to.params)
+      Component._dataRefresh = false
+      const childPathChanged = Component._path !== _lastPaths[i]
+      // Refresh component (call asyncData & fetch) when:
+      // Route path changed part includes current component
+      // Or route param changed part includes current component and watchParam is not `false`
+      // Or route query is changed and watchQuery returns `true`
+      if (this._routeChanged && childPathChanged) {
+        Component._dataRefresh = true
+      } else if (this._paramChanged && childPathChanged) {
+        const watchParam = Component.options.watchParam
+        Component._dataRefresh = watchParam !== false
+      } else if (this._queryChanged) {
+        const watchQuery = Component.options.watchQuery
+        if (watchQuery === true) {
+          Component._dataRefresh = true
+        } else if (Array.isArray(watchQuery)) {
+          Component._dataRefresh = watchQuery.some(key => this._diffQuery[key])
+        } else if (typeof watchQuery === 'function') {
+          if (!instances) {
+            instances = getMatchedComponentsInstances(to)
+          }
+          Component._dataRefresh = watchQuery.apply(instances[i], [to.query, from.query])
+        }
+      }
+      if (!this._hadError && this._isMounted && !Component._dataRefresh) {
+        return
+      }
+
+      const promises = []
+
+      const hasAsyncData = (
+        Component.options.asyncData &&
+        typeof Component.options.asyncData === 'function'
+      )
+
+      const hasFetch = Boolean(Component.options.fetch) && Component.options.fetch.length
+
+      const loadingIncrease = (hasAsyncData && hasFetch) ? 30 : 45
+
+      // Call asyncData(context)
+      if (hasAsyncData) {
+        const promise = promisify(Component.options.asyncData, app.context)
+
+        promise.then((asyncDataResult) => {
+          applyAsyncData(Component, asyncDataResult)
+
+          if (this.$loading.increase) {
+            this.$loading.increase(loadingIncrease)
+          }
+        })
+        promises.push(promise)
+      }
+
+      // Check disabled page loading
+      this.$loading.manual = Component.options.loading === false
+
+      // Call fetch(context)
+      if (hasFetch) {
+        let p = Component.options.fetch(app.context)
+        if (!p || (!(p instanceof Promise) && (typeof p.then !== 'function'))) {
+          p = Promise.resolve(p)
+        }
+        p.then((fetchResult) => {
+          if (this.$loading.increase) {
+            this.$loading.increase(loadingIncrease)
+          }
+        })
+        promises.push(p)
+      }
+
+      return Promise.all(promises)
+    }))
+
+    // If not redirected
+    if (!nextCalled) {
+      if (this.$loading.finish && !this.$loading.manual) {
+        this.$loading.finish()
+      }
+
+      next()
+    }
+  } catch (err) {
+    const error = err || {}
+    if (error.message === 'ERR_REDIRECT') {
+      return this.$nuxt.$emit('routeChanged', to, from, error)
+    }
+    _lastPaths = []
+
+    globalHandleError(error)
+
+    // Load error layout
+    let layout = (NuxtError.options || NuxtError).layout
+    if (typeof layout === 'function') {
+      layout = layout(app.context)
+    }
+    await this.loadLayout(layout)
+
+    this.error(error)
+    this.$nuxt.$emit('routeChanged', to, from, error)
+    next()
+  }
+}
+
+// Fix components format in matched, it's due to code-splitting of vue-router
+function normalizeComponents (to, ___) {
+  flatMapComponents(to, (Component, _, match, key) => {
+    if (typeof Component === 'object' && !Component.options) {
+      // Updated via vue-router resolveAsyncComponents()
+      Component = Vue.extend(Component)
+      Component._Ctor = Component
+      match.components[key] = Component
+    }
+    return Component
+  })
+}
+
+function setLayoutForNextPage (to) {
+  // Set layout
+  let hasError = Boolean(this.$options.nuxt.err)
+  if (this._hadError && this._dateLastError === this.$options.nuxt.dateErr) {
+    hasError = false
+  }
+  let layout = hasError
+    ? (NuxtError.options || NuxtError).layout
+    : to.matched[0].components.default.options.layout
+
+  if (typeof layout === 'function') {
+    layout = layout(app.context)
+  }
+
+  this.setLayout(layout)
+}
+
+function checkForErrors (app) {
+  // Hide error component if no error
+  if (app._hadError && app._dateLastError === app.$options.nuxt.dateErr) {
+    app.error()
+  }
+}
+
+// When navigating on a different route but the same component is used, Vue.js
+// Will not update the instance data, so we have to update $data ourselves
+function fixPrepatch (to, ___) {
+  if (this._routeChanged === false && this._paramChanged === false && this._queryChanged === false) {
+    return
+  }
+
+  const instances = getMatchedComponentsInstances(to)
+  const Components = getMatchedComponents(to)
+
+  let triggerScroll = false
+
+  Vue.nextTick(() => {
+    instances.forEach((instance, i) => {
+      if (!instance || instance._isDestroyed) {
+        return
+      }
+
+      if (
+        instance.constructor._dataRefresh &&
+        Components[i] === instance.constructor &&
+        instance.$vnode.data.keepAlive !== true &&
+        typeof instance.constructor.options.data === 'function'
+      ) {
+        const newData = instance.constructor.options.data.call(instance)
+        for (const key in newData) {
+          Vue.set(instance.$data, key, newData[key])
+        }
+
+        triggerScroll = true
+      }
+    })
+
+    if (triggerScroll) {
+      // Ensure to trigger scroll event after calling scrollBehavior
+      window.$nuxt.$nextTick(() => {
+        window.$nuxt.$emit('triggerScroll')
+      })
+    }
+
+    checkForErrors(this)
+
+    // Hot reloading
+    setTimeout(() => hotReloadAPI(this), 100)
+  })
+}
+
+function nuxtReady (_app) {
+  window.onNuxtReadyCbs.forEach((cb) => {
+    if (typeof cb === 'function') {
+      cb(_app)
+    }
+  })
+  // Special JSDOM
+  if (typeof window._onNuxtLoaded === 'function') {
+    window._onNuxtLoaded(_app)
+  }
+  // Add router hooks
+  router.afterEach((to, from) => {
+    // Wait for fixPrepatch + $data updates
+    Vue.nextTick(() => _app.$nuxt.$emit('routeChanged', to, from))
+  })
+}
+
+const noopData = () => { return {} }
+const noopFetch = () => {}
+
+// Special hot reload with asyncData(context)
+function getNuxtChildComponents ($parent, $components = []) {
+  $parent.$children.forEach(($child) => {
+    if ($child.$vnode && $child.$vnode.data.nuxtChild && !$components.find(c =>(c.$options.__file === $child.$options.__file))) {
+      $components.push($child)
+    }
+    if ($child.$children && $child.$children.length) {
+      getNuxtChildComponents($child, $components)
+    }
+  })
+
+  return $components
+}
+
+function hotReloadAPI(_app) {
+  if (!module.hot) return
+
+  let $components = getNuxtChildComponents(_app.$nuxt, [])
+
+  $components.forEach(addHotReload.bind(_app))
+}
+
+function addHotReload ($component, depth) {
+  if ($component.$vnode.data._hasHotReload) return
+  $component.$vnode.data._hasHotReload = true
+
+  var _forceUpdate = $component.$forceUpdate.bind($component.$parent)
+
+  $component.$vnode.context.$forceUpdate = async () => {
+    let Components = getMatchedComponents(router.currentRoute)
+    let Component = Components[depth]
+    if (!Component) {
+      return _forceUpdate()
+    }
+    if (typeof Component === 'object' && !Component.options) {
+      // Updated via vue-router resolveAsyncComponents()
+      Component = Vue.extend(Component)
+      Component._Ctor = Component
+    }
+    this.error()
+    let promises = []
+    const next = function (path) {
+      this.$loading.finish && this.$loading.finish()
+      router.push(path)
+    }
+    await setContext(app, {
+      route: router.currentRoute,
+      isHMR: true,
+      next: next.bind(this)
+    })
+    const context = app.context
+
+    if (this.$loading.start && !this.$loading.manual) {
+      this.$loading.start()
+    }
+
+    callMiddleware.call(this, Components, context)
+    .then(() => {
+      // If layout changed
+      if (depth !== 0) {
+        return
+      }
+
+      let layout = Component.options.layout || 'default'
+      if (typeof layout === 'function') {
+        layout = layout(context)
+      }
+      if (this.layoutName === layout) {
+        return
+      }
+      let promise = this.loadLayout(layout)
+      promise.then(() => {
+        this.setLayout(layout)
+        Vue.nextTick(() => hotReloadAPI(this))
+      })
+      return promise
+    })
+
+    .then(() => {
+      return callMiddleware.call(this, Components, context, this.layout)
+    })
+
+    .then(() => {
+      // Call asyncData(context)
+      let pAsyncData = promisify(Component.options.asyncData || noopData, context)
+      pAsyncData.then((asyncDataResult) => {
+        applyAsyncData(Component, asyncDataResult)
+        this.$loading.increase && this.$loading.increase(30)
+      })
+      promises.push(pAsyncData)
+
+      // Call fetch()
+      Component.options.fetch = Component.options.fetch || noopFetch
+      let pFetch = Component.options.fetch.length && Component.options.fetch(context)
+      if (!pFetch || (!(pFetch instanceof Promise) && (typeof pFetch.then !== 'function'))) { pFetch = Promise.resolve(pFetch) }
+      pFetch.then(() => this.$loading.increase && this.$loading.increase(30))
+      promises.push(pFetch)
+
+      return Promise.all(promises)
+    })
+    .then(() => {
+      this.$loading.finish && this.$loading.finish()
+      _forceUpdate()
+      setTimeout(() => hotReloadAPI(this), 100)
+    })
+  }
+}
+
+async function mountApp (__app) {
+  // Set global variables
+  app = __app.app
+  router = __app.router
+
+  // Create Vue instance
+  const _app = new Vue(app)
+
+  // Load layout
+  const layout = NUXT.layout || 'default'
+  await _app.loadLayout(layout)
+  _app.setLayout(layout)
+
+  // Mounts Vue app to DOM element
+  const mount = () => {
+    _app.$mount('#__nuxt')
+
+    // Add afterEach router hooks
+    router.afterEach(normalizeComponents)
+
+    router.afterEach(setLayoutForNextPage.bind(_app))
+
+    router.afterEach(fixPrepatch.bind(_app))
+
+    // Listen for first Vue update
+    Vue.nextTick(() => {
+      // Call window.{{globals.readyCallback}} callbacks
+      nuxtReady(_app)
+
+      // Enable hot reloading
+      hotReloadAPI(_app)
+    })
+  }
+
+  // Resolve route components
+  const Components = await Promise.all(resolveComponents(app.context.route))
+
+  // Enable transitions
+  _app.setTransitions = _app.$options.nuxt.setTransitions.bind(_app)
+  if (Components.length) {
+    _app.setTransitions(mapTransitions(Components, router.currentRoute))
+    _lastPaths = router.currentRoute.matched.map(route => compile(route.path)(router.currentRoute.params))
+  }
+
+  // Initialize error handler
+  _app.$loading = {} // To avoid error while _app.$nuxt does not exist
+  if (NUXT.error) {
+    _app.error(NUXT.error)
+  }
+
+  // Add beforeEach router hooks
+  router.beforeEach(loadAsyncComponents.bind(_app))
+  router.beforeEach(render.bind(_app))
+
+  // Fix in static: remove trailing slash to force hydration
+  // Full static, if server-rendered: hydrate, to allow custom redirect to generated page
+
+  // Fix in static: remove trailing slash to force hydration
+  if (NUXT.serverRendered && isSamePath(NUXT.routePath, _app.context.route.path)) {
+    return mount()
+  }
+
+  // First render on client-side
+  const clientFirstMount = () => {
+    normalizeComponents(router.currentRoute, router.currentRoute)
+    setLayoutForNextPage.call(_app, router.currentRoute)
+    checkForErrors(_app)
+    // Don't call fixPrepatch.call(_app, router.currentRoute, router.currentRoute) since it's first render
+    mount()
+  }
+
+  // fix: force next tick to avoid having same timestamp when an error happen on spa fallback
+  await new Promise(resolve => setTimeout(resolve, 0))
+  render.call(_app, router.currentRoute, router.currentRoute, (path) => {
+    // If not redirected
+    if (!path) {
+      clientFirstMount()
+      return
+    }
+
+    // Add a one-time afterEach hook to
+    // mount the app wait for redirect and route gets resolved
+    const unregisterHook = router.afterEach((to, from) => {
+      unregisterHook()
+      clientFirstMount()
+    })
+
+    // Push the path and let route to be resolved
+    router.push(path, undefined, (err) => {
+      if (err) {
+        errorHandler(err)
+      }
+    })
+  })
+}

+ 33 - 0
.nuxt/components/index.js

@@ -0,0 +1,33 @@
+export { default as ContactConsult } from '../..\\components\\ContactConsult\\index.vue'
+export { default as ContactJoinUs } from '../..\\components\\ContactJoinUs\\index.vue'
+
+// nuxt/nuxt.js#8607
+function wrapFunctional(options) {
+  if (!options || !options.functional) {
+    return options
+  }
+
+  const propKeys = Array.isArray(options.props) ? options.props : Object.keys(options.props || {})
+
+  return {
+    render(h) {
+      const attrs = {}
+      const props = {}
+
+      for (const key in this.$attrs) {
+        if (propKeys.includes(key)) {
+          props[key] = this.$attrs[key]
+        } else {
+          attrs[key] = this.$attrs[key]
+        }
+      }
+
+      return h(options, {
+        on: this.$listeners,
+        attrs,
+        props,
+        scopedSlots: this.$scopedSlots,
+      }, this.$slots.default)
+    }
+  }
+}

+ 143 - 0
.nuxt/components/nuxt-build-indicator.vue

@@ -0,0 +1,143 @@
+<template>
+  <transition appear>
+    <div v-if="building" class="nuxt__build_indicator" :style="indicatorStyle">
+      <svg viewBox="0 0 96 72" version="1" xmlns="http://www.w3.org/2000/svg">
+        <g fill="none" fill-rule="evenodd">
+          <path d="M6 66h23l1-3 21-37L40 6 6 66zM79 66h11L62 17l-5 9 22 37v3zM54 31L35 66h38z" />
+          <path d="M29 69v-1-2H6L40 6l11 20 3-6L44 3s-2-3-4-3-3 1-5 3L1 63c0 1-2 3 0 6 0 1 2 2 5 2h28c-3 0-4-1-5-2z" fill="#00C58E" />
+          <path d="M95 63L67 14c0-1-2-3-5-3-1 0-3 0-4 3l-4 6 3 6 5-9 28 49H79a5 5 0 0 1 0 3c-2 2-5 2-5 2h16c1 0 4 0 5-2 1-1 2-3 0-6z" fill="#00C58E" />
+          <path d="M79 69v-1-2-3L57 26l-3-6-3 6-21 37-1 3a5 5 0 0 0 0 3c1 1 2 2 5 2h40s3 0 5-2zM54 31l19 35H35l19-35z" fill="#FFF" fill-rule="nonzero" />
+        </g>
+      </svg>
+      {{ animatedProgress }}%
+    </div>
+  </transition>
+</template>
+
+<script>
+export default {
+  name: 'NuxtBuildIndicator',
+  data () {
+    return {
+      building: false,
+      progress: 0,
+      animatedProgress: 0,
+      reconnectAttempts: 0
+    }
+  },
+  computed: {
+    options: () => ({"position":"bottom-right","backgroundColor":"#2E495E","color":"#00C48D"}),
+    indicatorStyle () {
+      const [d1, d2] = this.options.position.split('-')
+      return {
+        [d1]: '20px',
+        [d2]: '20px',
+        'background-color': this.options.backgroundColor,
+        color: this.options.color
+      }
+    }
+  },
+  watch: {
+    progress (val, oldVal) {
+      // Average progress may decrease but ignore it!
+      if (val < oldVal) {
+        return
+      }
+      // Cancel old animation
+      clearInterval(this._progressAnimation)
+      // Jump to edge immediately
+      if (val < 10 || val > 90) {
+        this.animatedProgress = val
+        return
+      }
+      // Animate to value
+      this._progressAnimation = setInterval(() => {
+        const diff = this.progress - this.animatedProgress
+        if (diff > 0) {
+          this.animatedProgress++
+        } else {
+          clearInterval(this._progressAnimation)
+        }
+      }, 50)
+    }
+  },
+  mounted () {
+    if (EventSource === undefined) {
+      return // Unsupported
+    }
+    this.sseConnect()
+  },
+  beforeDestroy () {
+    this.sseClose()
+    clearInterval(this._progressAnimation)
+  },
+  methods: {
+    sseConnect () {
+      if (this._connecting) {
+        return
+      }
+      this._connecting = true
+      this.sse = new EventSource('/_loading/sse')
+      this.sse.addEventListener('message', event => this.onSseMessage(event))
+    },
+    onSseMessage (message) {
+      const data = JSON.parse(message.data)
+      if (!data.states) {
+        return
+      }
+
+      this.progress = Math.round(data.states.reduce((p, s) => p + s.progress, 0) / data.states.length)
+
+      if (!data.allDone) {
+        this.building = true
+      } else {
+        this.$nextTick(() => {
+          this.building = false
+          this.animatedProgress = 0
+          this.progress = 0
+          clearInterval(this._progressAnimation)
+        })
+      }
+    },
+
+    sseClose () {
+      if (this.sse) {
+        this.sse.close()
+        delete this.sse
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.nuxt__build_indicator {
+  box-sizing: border-box;
+  position: fixed;
+  font-family: monospace;
+  padding: 5px 10px;
+  border-radius: 5px;
+  box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.2);
+  width: 88px;
+  z-index: 2147483647;
+  font-size: 16px;
+  line-height: 1.2rem;
+}
+.v-enter-active, .v-leave-active {
+  transition-delay: 0.2s;
+  transition-property: all;
+  transition-duration: 0.3s;
+}
+.v-leave-to {
+  opacity: 0;
+  transform: translateY(20px);
+}
+svg {
+  display: inline-block;
+  vertical-align: baseline;
+  width: 1.1em;
+  height: 0.825em;
+  position: relative;
+  top: 1px;
+}
+</style>

+ 122 - 0
.nuxt/components/nuxt-child.js

@@ -0,0 +1,122 @@
+
+export default {
+  name: 'NuxtChild',
+  functional: true,
+  props: {
+    nuxtChildKey: {
+      type: String,
+      default: ''
+    },
+    keepAlive: Boolean,
+    keepAliveProps: {
+      type: Object,
+      default: undefined
+    }
+  },
+  render (_, { parent, data, props }) {
+    const h = parent.$createElement
+
+    data.nuxtChild = true
+    const _parent = parent
+    const transitions = parent.$nuxt.nuxt.transitions
+    const defaultTransition = parent.$nuxt.nuxt.defaultTransition
+
+    let depth = 0
+    while (parent) {
+      if (parent.$vnode && parent.$vnode.data.nuxtChild) {
+        depth++
+      }
+      parent = parent.$parent
+    }
+    data.nuxtChildDepth = depth
+    const transition = transitions[depth] || defaultTransition
+    const transitionProps = {}
+    transitionsKeys.forEach((key) => {
+      if (typeof transition[key] !== 'undefined') {
+        transitionProps[key] = transition[key]
+      }
+    })
+
+    const listeners = {}
+    listenersKeys.forEach((key) => {
+      if (typeof transition[key] === 'function') {
+        listeners[key] = transition[key].bind(_parent)
+      }
+    })
+    if (process.client) {
+      // Add triggerScroll event on beforeEnter (fix #1376)
+      const beforeEnter = listeners.beforeEnter
+      listeners.beforeEnter = (el) => {
+        // Ensure to trigger scroll event after calling scrollBehavior
+        window.$nuxt.$nextTick(() => {
+          window.$nuxt.$emit('triggerScroll')
+        })
+        if (beforeEnter) {
+          return beforeEnter.call(_parent, el)
+        }
+      }
+    }
+
+    // make sure that leave is called asynchronous (fix #5703)
+    if (transition.css === false) {
+      const leave = listeners.leave
+
+      // only add leave listener when user didnt provide one
+      // or when it misses the done argument
+      if (!leave || leave.length < 2) {
+        listeners.leave = (el, done) => {
+          if (leave) {
+            leave.call(_parent, el)
+          }
+
+          _parent.$nextTick(done)
+        }
+      }
+    }
+
+    let routerView = h('routerView', data)
+
+    if (props.keepAlive) {
+      routerView = h('keep-alive', { props: props.keepAliveProps }, [routerView])
+    }
+
+    return h('transition', {
+      props: transitionProps,
+      on: listeners
+    }, [routerView])
+  }
+}
+
+const transitionsKeys = [
+  'name',
+  'mode',
+  'appear',
+  'css',
+  'type',
+  'duration',
+  'enterClass',
+  'leaveClass',
+  'appearClass',
+  'enterActiveClass',
+  'enterActiveClass',
+  'leaveActiveClass',
+  'appearActiveClass',
+  'enterToClass',
+  'leaveToClass',
+  'appearToClass'
+]
+
+const listenersKeys = [
+  'beforeEnter',
+  'enter',
+  'afterEnter',
+  'enterCancelled',
+  'beforeLeave',
+  'leave',
+  'afterLeave',
+  'leaveCancelled',
+  'beforeAppear',
+  'appear',
+  'afterAppear',
+  'appearCancelled'
+]

+ 98 - 0
.nuxt/components/nuxt-error.vue

@@ -0,0 +1,98 @@
+<template>
+  <div class="__nuxt-error-page">
+    <div class="error">
+      <svg xmlns="http://www.w3.org/2000/svg" width="90" height="90" fill="#DBE1EC" viewBox="0 0 48 48">
+        <path d="M22 30h4v4h-4zm0-16h4v12h-4zm1.99-10C12.94 4 4 12.95 4 24s8.94 20 19.99 20S44 35.05 44 24 35.04 4 23.99 4zM24 40c-8.84 0-16-7.16-16-16S15.16 8 24 8s16 7.16 16 16-7.16 16-16 16z" />
+      </svg>
+
+      <div class="title">{{ message }}</div>
+      <p v-if="statusCode === 404" class="description">
+        <a v-if="typeof $route === 'undefined'" class="error-link" href="/"></a>
+        <NuxtLink v-else class="error-link" to="/">Back to the home page</NuxtLink>
+      </p>
+
+      <p class="description" v-else>An error occurred while rendering the page. Check developer tools console for details.</p>
+
+      <div class="logo">
+        <a href="https://nuxtjs.org" target="_blank" rel="noopener">Nuxt</a>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'NuxtError',
+  props: {
+    error: {
+      type: Object,
+      default: null
+    }
+  },
+  computed: {
+    statusCode () {
+      return (this.error && this.error.statusCode) || 500
+    },
+    message () {
+      return this.error.message || 'Error'
+    }
+  },
+  head () {
+    return {
+      title: this.message,
+      meta: [
+        {
+          name: 'viewport',
+          content: 'width=device-width,initial-scale=1.0,minimum-scale=1.0'
+        }
+      ]
+    }
+  }
+}
+</script>
+
+<style>
+.__nuxt-error-page {
+  padding: 1rem;
+  background: #F7F8FB;
+  color: #47494E;
+  text-align: center;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+  font-family: sans-serif;
+  font-weight: 100 !important;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+  -webkit-font-smoothing: antialiased;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+.__nuxt-error-page .error {
+  max-width: 450px;
+}
+.__nuxt-error-page .title {
+  font-size: 1.5rem;
+  margin-top: 15px;
+  color: #47494E;
+  margin-bottom: 8px;
+}
+.__nuxt-error-page .description {
+  color: #7F828B;
+  line-height: 21px;
+  margin-bottom: 10px;
+}
+.__nuxt-error-page a {
+  color: #7F828B !important;
+  text-decoration: none;
+}
+.__nuxt-error-page .logo {
+  position: fixed;
+  left: 12px;
+  bottom: 12px;
+}
+</style>

+ 98 - 0
.nuxt/components/nuxt-link.client.js

@@ -0,0 +1,98 @@
+import Vue from 'vue'
+
+const requestIdleCallback = window.requestIdleCallback ||
+  function (cb) {
+    const start = Date.now()
+    return setTimeout(function () {
+      cb({
+        didTimeout: false,
+        timeRemaining: () => Math.max(0, 50 - (Date.now() - start))
+      })
+    }, 1)
+  }
+
+const cancelIdleCallback = window.cancelIdleCallback || function (id) {
+  clearTimeout(id)
+}
+
+const observer = window.IntersectionObserver && new window.IntersectionObserver((entries) => {
+  entries.forEach(({ intersectionRatio, target: link }) => {
+    if (intersectionRatio <= 0 || !link.__prefetch) {
+      return
+    }
+    link.__prefetch()
+  })
+})
+
+export default {
+  name: 'NuxtLink',
+  extends: Vue.component('RouterLink'),
+  props: {
+    prefetch: {
+      type: Boolean,
+      default: true
+    },
+    noPrefetch: {
+      type: Boolean,
+      default: false
+    }
+  },
+  mounted () {
+    if (this.prefetch && !this.noPrefetch) {
+      this.handleId = requestIdleCallback(this.observe, { timeout: 2e3 })
+    }
+  },
+  beforeDestroy () {
+    cancelIdleCallback(this.handleId)
+
+    if (this.__observed) {
+      observer.unobserve(this.$el)
+      delete this.$el.__prefetch
+    }
+  },
+  methods: {
+    observe () {
+      // If no IntersectionObserver, avoid prefetching
+      if (!observer) {
+        return
+      }
+      // Add to observer
+      if (this.shouldPrefetch()) {
+        this.$el.__prefetch = this.prefetchLink.bind(this)
+        observer.observe(this.$el)
+        this.__observed = true
+      }
+    },
+    shouldPrefetch () {
+      return this.getPrefetchComponents().length > 0
+    },
+    canPrefetch () {
+      const conn = navigator.connection
+      const hasBadConnection = this.$nuxt.isOffline || (conn && ((conn.effectiveType || '').includes('2g') || conn.saveData))
+
+      return !hasBadConnection
+    },
+    getPrefetchComponents () {
+      const ref = this.$router.resolve(this.to, this.$route, this.append)
+      const Components = ref.resolved.matched.map(r => r.components.default)
+
+      return Components.filter(Component => typeof Component === 'function' && !Component.options && !Component.__prefetched)
+    },
+    prefetchLink () {
+      if (!this.canPrefetch()) {
+        return
+      }
+      // Stop observing this link (in case of internet connection changes)
+      observer.unobserve(this.$el)
+      const Components = this.getPrefetchComponents()
+
+      for (const Component of Components) {
+        const componentOrPromise = Component()
+        if (componentOrPromise instanceof Promise) {
+          componentOrPromise.catch(() => {})
+        }
+        Component.__prefetched = true
+      }
+    }
+  }
+}

+ 16 - 0
.nuxt/components/nuxt-link.server.js

@@ -0,0 +1,16 @@
+import Vue from 'vue'
+
+export default {
+  name: 'NuxtLink',
+  extends: Vue.component('RouterLink'),
+  props: {
+    prefetch: {
+      type: Boolean,
+      default: true
+    },
+    noPrefetch: {
+      type: Boolean,
+      default: false
+    }
+  }
+}

+ 177 - 0
.nuxt/components/nuxt-loading.vue

@@ -0,0 +1,177 @@
+<script>
+export default {
+  name: 'NuxtLoading',
+  data () {
+    return {
+      percent: 0,
+      show: false,
+      canSucceed: true,
+      reversed: false,
+      skipTimerCount: 0,
+      rtl: false,
+      throttle: 200,
+      duration: 5000,
+      continuous: false
+    }
+  },
+  computed: {
+    left () {
+      if (!this.continuous && !this.rtl) {
+        return false
+      }
+      return this.rtl
+        ? (this.reversed ? '0px' : 'auto')
+        : (!this.reversed ? '0px' : 'auto')
+    }
+  },
+  beforeDestroy () {
+    this.clear()
+  },
+  methods: {
+    clear () {
+      clearInterval(this._timer)
+      clearTimeout(this._throttle)
+      this._timer = null
+    },
+    start () {
+      this.clear()
+      this.percent = 0
+      this.reversed = false
+      this.skipTimerCount = 0
+      this.canSucceed = true
+
+      if (this.throttle) {
+        this._throttle = setTimeout(() => this.startTimer(), this.throttle)
+      } else {
+        this.startTimer()
+      }
+      return this
+    },
+    set (num) {
+      this.show = true
+      this.canSucceed = true
+      this.percent = Math.min(100, Math.max(0, Math.floor(num)))
+      return this
+    },
+    get () {
+      return this.percent
+    },
+    increase (num) {
+      this.percent = Math.min(100, Math.floor(this.percent + num))
+      return this
+    },
+    decrease (num) {
+      this.percent = Math.max(0, Math.floor(this.percent - num))
+      return this
+    },
+    pause () {
+      clearInterval(this._timer)
+      return this
+    },
+    resume () {
+      this.startTimer()
+      return this
+    },
+    finish () {
+      this.percent = this.reversed ? 0 : 100
+      this.hide()
+      return this
+    },
+    hide () {
+      this.clear()
+      setTimeout(() => {
+        this.show = false
+        this.$nextTick(() => {
+          this.percent = 0
+          this.reversed = false
+        })
+      }, 500)
+      return this
+    },
+    fail (error) {
+      this.canSucceed = false
+      return this
+    },
+    startTimer () {
+      if (!this.show) {
+        this.show = true
+      }
+      if (typeof this._cut === 'undefined') {
+        this._cut = 10000 / Math.floor(this.duration)
+      }
+
+      this._timer = setInterval(() => {
+        /**
+         * When reversing direction skip one timers
+         * so 0, 100 are displayed for two iterations
+         * also disable css width transitioning
+         * which otherwise interferes and shows
+         * a jojo effect
+         */
+        if (this.skipTimerCount > 0) {
+          this.skipTimerCount--
+          return
+        }
+
+        if (this.reversed) {
+          this.decrease(this._cut)
+        } else {
+          this.increase(this._cut)
+        }
+
+        if (this.continuous) {
+          if (this.percent >= 100) {
+            this.skipTimerCount = 1
+
+            this.reversed = !this.reversed
+          } else if (this.percent <= 0) {
+            this.skipTimerCount = 1
+
+            this.reversed = !this.reversed
+          }
+        }
+      }, 100)
+    }
+  },
+  render (h) {
+    let el = h(false)
+    if (this.show) {
+      el = h('div', {
+        staticClass: 'nuxt-progress',
+        class: {
+          'nuxt-progress-notransition': this.skipTimerCount > 0,
+          'nuxt-progress-failed': !this.canSucceed
+        },
+        style: {
+          width: this.percent + '%',
+          left: this.left
+        }
+      })
+    }
+    return el
+  }
+}
+</script>
+
+<style>
+.nuxt-progress {
+  position: fixed;
+  top: 0px;
+  left: 0px;
+  right: 0px;
+  height: 2px;
+  width: 0%;
+  opacity: 1;
+  transition: width 0.1s, opacity 0.4s;
+  background-color: black;
+  z-index: 999999;
+}
+
+.nuxt-progress.nuxt-progress-notransition {
+  transition: none;
+}
+
+.nuxt-progress-failed {
+  background-color: red;
+}
+</style>

+ 101 - 0
.nuxt/components/nuxt.js

@@ -0,0 +1,101 @@
+import Vue from 'vue'
+import { compile } from '../utils'
+
+import NuxtError from './nuxt-error.vue'
+
+import NuxtChild from './nuxt-child'
+
+export default {
+  name: 'Nuxt',
+  components: {
+    NuxtChild,
+    NuxtError
+  },
+  props: {
+    nuxtChildKey: {
+      type: String,
+      default: undefined
+    },
+    keepAlive: Boolean,
+    keepAliveProps: {
+      type: Object,
+      default: undefined
+    },
+    name: {
+      type: String,
+      default: 'default'
+    }
+  },
+  errorCaptured (error) {
+    // if we receive and error while showing the NuxtError component
+    // capture the error and force an immediate update so we re-render
+    // without the NuxtError component
+    if (this.displayingNuxtError) {
+      this.errorFromNuxtError = error
+      this.$forceUpdate()
+    }
+  },
+  computed: {
+    routerViewKey () {
+      // If nuxtChildKey prop is given or current route has children
+      if (typeof this.nuxtChildKey !== 'undefined' || this.$route.matched.length > 1) {
+        return this.nuxtChildKey || compile(this.$route.matched[0].path)(this.$route.params)
+      }
+
+      const [matchedRoute] = this.$route.matched
+
+      if (!matchedRoute) {
+        return this.$route.path
+      }
+
+      const Component = matchedRoute.components.default
+
+      if (Component && Component.options) {
+        const { options } = Component
+
+        if (options.key) {
+          return (typeof options.key === 'function' ? options.key(this.$route) : options.key)
+        }
+      }
+
+      const strict = /\/$/.test(matchedRoute.path)
+      return strict ? this.$route.path : this.$route.path.replace(/\/$/, '')
+    }
+  },
+  beforeCreate () {
+    Vue.util.defineReactive(this, 'nuxt', this.$root.$options.nuxt)
+  },
+  render (h) {
+    // if there is no error
+    if (!this.nuxt.err) {
+      // Directly return nuxt child
+      return h('NuxtChild', {
+        key: this.routerViewKey,
+        props: this.$props
+      })
+    }
+
+    // if an error occurred within NuxtError show a simple
+    // error message instead to prevent looping
+    if (this.errorFromNuxtError) {
+      this.$nextTick(() => (this.errorFromNuxtError = false))
+
+      return h('div', {}, [
+        h('h2', 'An error occurred while showing the error page'),
+        h('p', 'Unfortunately an error occurred and while showing the error page another error occurred'),
+        h('p', `Error details: ${this.errorFromNuxtError.toString()}`),
+        h('nuxt-link', { props: { to: '/' } }, 'Go back to home')
+      ])
+    }
+
+    // track if we are showing the NuxtError component
+    this.displayingNuxtError = true
+    this.$nextTick(() => (this.displayingNuxtError = false))
+
+    return h(NuxtError, {
+      props: {
+        error: this.nuxt.err
+      }
+    })
+  }
+}

+ 7 - 0
.nuxt/components/plugin.js

@@ -0,0 +1,7 @@
+import Vue from 'vue'
+import * as components from './index'
+
+for (const name in components) {
+  Vue.component(name, components[name])
+  Vue.component('Lazy' + name, components[name])
+}

+ 10 - 0
.nuxt/components/readme.md

@@ -0,0 +1,10 @@
+# Discovered Components
+
+This is an auto-generated list of components discovered by [nuxt/components](https://github.com/nuxt/components).
+
+You can directly use them in pages and other components without the need to import them.
+
+**Tip:** If a component is conditionally rendered with `v-if` and is big, it is better to use `Lazy` or `lazy-` prefix to lazy load.
+
+- `<ContactConsult>` | `<contact-consult>` (components/ContactConsult/index.vue)
+- `<ContactJoinUs>` | `<contact-join-us>` (components/ContactJoinUs/index.vue)

+ 1 - 0
.nuxt/empty.js

@@ -0,0 +1 @@
+// This file is intentionally left empty for noop aliases

+ 224 - 0
.nuxt/index.js

@@ -0,0 +1,224 @@
+import Vue from 'vue'
+
+import Meta from 'vue-meta'
+import ClientOnly from 'vue-client-only'
+import NoSsr from 'vue-no-ssr'
+import { createRouter } from './router.js'
+import NuxtChild from './components/nuxt-child.js'
+import NuxtError from './components/nuxt-error.vue'
+import Nuxt from './components/nuxt.js'
+import App from './App.js'
+import { setContext, getLocation, getRouteData, normalizeError } from './utils'
+
+/* Plugins */
+
+import nuxt_plugin_plugin_1e727d58 from 'nuxt_plugin_plugin_1e727d58' // Source: .\\components\\plugin.js (mode: 'all')
+
+// Component: <ClientOnly>
+Vue.component(ClientOnly.name, ClientOnly)
+
+// TODO: Remove in Nuxt 3: <NoSsr>
+Vue.component(NoSsr.name, {
+  ...NoSsr,
+  render (h, ctx) {
+    if (process.client && !NoSsr._warned) {
+      NoSsr._warned = true
+
+      console.warn('<no-ssr> has been deprecated and will be removed in Nuxt 3, please use <client-only> instead')
+    }
+    return NoSsr.render(h, ctx)
+  }
+})
+
+// Component: <NuxtChild>
+Vue.component(NuxtChild.name, NuxtChild)
+Vue.component('NChild', NuxtChild)
+
+// Component NuxtLink is imported in server.js or client.js
+
+// Component: <Nuxt>
+Vue.component(Nuxt.name, Nuxt)
+
+Object.defineProperty(Vue.prototype, '$nuxt', {
+  get() {
+    const globalNuxt = this.$root.$options.$nuxt
+    if (process.client && !globalNuxt && typeof window !== 'undefined') {
+      return window.$nuxt
+    }
+    return globalNuxt
+  },
+  configurable: true
+})
+
+Vue.use(Meta, {"keyName":"head","attribute":"data-n-head","ssrAttribute":"data-n-head-ssr","tagIDKeyName":"hid"})
+
+const defaultTransition = {"name":"page","mode":"out-in","appear":false,"appearClass":"appear","appearActiveClass":"appear-active","appearToClass":"appear-to"}
+
+async function createApp(ssrContext, config = {}) {
+  const router = await createRouter(ssrContext, config)
+
+  // Create Root instance
+
+  // here we inject the router and store to all child components,
+  // making them available everywhere as `this.$router` and `this.$store`.
+  const app = {
+    head: {"title":"caimei-authentic-website","htmlAttrs":{"lang":"en"},"meta":[{"charset":"utf-8"},{"name":"keywords","content":"ross、西班牙ross、ross智能体疗、云智能体疗、ross产康、ross美容"},{"hid":"description","name":"description","content":"西班牙ROSS坚持创新45年,专注人体健康发展、致力于免疫力提升,为您的健康保驾护航,助你更美更健康!"},{"name":"viewport","content":"width=device-width, initial-scale=1"},{"name":"format-detection","content":"telephone=no"},{"name":"viewport","content":"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"}],"link":[{"rel":"icon","type":"image\u002Fx-icon","href":"\u002Ffavicon.ico"},{"rel":"stylesheet","href":"\u002Flibs\u002Fswiper\u002Fswiper.min.css"}],"script":[{"src":"\u002Flibs\u002Fjquery-3.6.0.min.js"},{"src":"\u002Flibs\u002Fswiper\u002Fswiper.min.js"},{"src":"\u002Fjs\u002Fmain.js"}],"style":[]},
+
+    router,
+    nuxt: {
+      defaultTransition,
+      transitions: [defaultTransition],
+      setTransitions (transitions) {
+        if (!Array.isArray(transitions)) {
+          transitions = [transitions]
+        }
+        transitions = transitions.map((transition) => {
+          if (!transition) {
+            transition = defaultTransition
+          } else if (typeof transition === 'string') {
+            transition = Object.assign({}, defaultTransition, { name: transition })
+          } else {
+            transition = Object.assign({}, defaultTransition, transition)
+          }
+          return transition
+        })
+        this.$options.nuxt.transitions = transitions
+        return transitions
+      },
+
+      err: null,
+      dateErr: null,
+      error (err) {
+        err = err || null
+        app.context._errored = Boolean(err)
+        err = err ? normalizeError(err) : null
+        let nuxt = app.nuxt // to work with @vue/composition-api, see https://github.com/nuxt/nuxt.js/issues/6517#issuecomment-573280207
+        if (this) {
+          nuxt = this.nuxt || this.$options.nuxt
+        }
+        nuxt.dateErr = Date.now()
+        nuxt.err = err
+        // Used in src/server.js
+        if (ssrContext) {
+          ssrContext.nuxt.error = err
+        }
+        return err
+      }
+    },
+    ...App
+  }
+
+  const next = ssrContext ? ssrContext.next : location => app.router.push(location)
+  // Resolve route
+  let route
+  if (ssrContext) {
+    route = router.resolve(ssrContext.url).route
+  } else {
+    const path = getLocation(router.options.base, router.options.mode)
+    route = router.resolve(path).route
+  }
+
+  // Set context to app.context
+  await setContext(app, {
+    route,
+    next,
+    error: app.nuxt.error.bind(app),
+    payload: ssrContext ? ssrContext.payload : undefined,
+    req: ssrContext ? ssrContext.req : undefined,
+    res: ssrContext ? ssrContext.res : undefined,
+    beforeRenderFns: ssrContext ? ssrContext.beforeRenderFns : undefined,
+    ssrContext
+  })
+
+  function inject(key, value) {
+    if (!key) {
+      throw new Error('inject(key, value) has no key provided')
+    }
+    if (value === undefined) {
+      throw new Error(`inject('${key}', value) has no value provided`)
+    }
+
+    key = '$' + key
+    // Add into app
+    app[key] = value
+    // Add into context
+    if (!app.context[key]) {
+      app.context[key] = value
+    }
+
+    // Check if plugin not already installed
+    const installKey = '__nuxt_' + key + '_installed__'
+    if (Vue[installKey]) {
+      return
+    }
+    Vue[installKey] = true
+    // Call Vue.use() to install the plugin into vm
+    Vue.use(() => {
+      if (!Object.prototype.hasOwnProperty.call(Vue.prototype, key)) {
+        Object.defineProperty(Vue.prototype, key, {
+          get () {
+            return this.$root.$options[key]
+          }
+        })
+      }
+    })
+  }
+
+  // Inject runtime config as $config
+  inject('config', config)
+
+  // Add enablePreview(previewData = {}) in context for plugins
+  if (process.static && process.client) {
+    app.context.enablePreview = function (previewData = {}) {
+      app.previewData = Object.assign({}, previewData)
+      inject('preview', previewData)
+    }
+  }
+  // Plugin execution
+
+  if (typeof nuxt_plugin_plugin_1e727d58 === 'function') {
+    await nuxt_plugin_plugin_1e727d58(app.context, inject)
+  }
+
+  // Lock enablePreview in context
+  if (process.static && process.client) {
+    app.context.enablePreview = function () {
+      console.warn('You cannot call enablePreview() outside a plugin.')
+    }
+  }
+
+  // Wait for async component to be resolved first
+  await new Promise((resolve, reject) => {
+    // Ignore 404s rather than blindly replacing URL in browser
+    if (process.client) {
+      const { route } = router.resolve(app.context.route.fullPath)
+      if (!route.matched.length) {
+        return resolve()
+      }
+    }
+    router.replace(app.context.route.fullPath, resolve, (err) => {
+      // https://github.com/vuejs/vue-router/blob/v3.4.3/src/util/errors.js
+      if (!err._isRouter) return reject(err)
+      if (err.type !== 2 /* NavigationFailureType.redirected */) return resolve()
+
+      // navigated to a different route in router guard
+      const unregister = router.afterEach(async (to, from) => {
+        if (process.server && ssrContext && ssrContext.url) {
+          ssrContext.url = to.fullPath
+        }
+        app.context.route = await getRouteData(to)
+        app.context.params = to.params || {}
+        app.context.query = to.query || {}
+        unregister()
+        resolve()
+      })
+    })
+  })
+
+  return {
+    app,
+    router
+  }
+}
+
+export { createApp, NuxtError }

+ 82 - 0
.nuxt/jsonp.js

@@ -0,0 +1,82 @@
+const chunks = {} // chunkId => exports
+const chunksInstalling = {} // chunkId => Promise
+const failedChunks = {}
+
+function importChunk(chunkId, src) {
+  // Already installed
+  if (chunks[chunkId]) {
+    return Promise.resolve(chunks[chunkId])
+  }
+
+  // Failed loading
+  if (failedChunks[chunkId]) {
+    return Promise.reject(failedChunks[chunkId])
+  }
+
+  // Installing
+  if (chunksInstalling[chunkId]) {
+    return chunksInstalling[chunkId]
+  }
+
+  // Set a promise in chunk cache
+  let resolve, reject
+  const promise = chunksInstalling[chunkId] = new Promise((_resolve, _reject) => {
+    resolve = _resolve
+    reject = _reject
+  })
+
+  // Clear chunk data from cache
+  delete chunks[chunkId]
+
+  // Start chunk loading
+  const script = document.createElement('script')
+  script.charset = 'utf-8'
+  script.timeout = 120
+  script.src = src
+  let timeout
+
+  // Create error before stack unwound to get useful stacktrace later
+  const error = new Error()
+
+  // Complete handlers
+  const onScriptComplete = script.onerror = script.onload = (event) => {
+    // Cleanups
+    clearTimeout(timeout)
+    delete chunksInstalling[chunkId]
+
+    // Avoid mem leaks in IE
+    script.onerror = script.onload = null
+
+    // Verify chunk is loaded
+    if (chunks[chunkId]) {
+      return resolve(chunks[chunkId])
+    }
+
+    // Something bad happened
+    const errorType = event && (event.type === 'load' ? 'missing' : event.type)
+    const realSrc = event && event.target && event.target.src
+    error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'
+    error.name = 'ChunkLoadError'
+    error.type = errorType
+    error.request = realSrc
+    failedChunks[chunkId] = error
+    reject(error)
+  }
+
+  // Timeout
+  timeout = setTimeout(() => {
+    onScriptComplete({ type: 'timeout', target: script })
+  }, 120000)
+
+  // Append script
+  document.head.appendChild(script)
+
+  // Return promise
+  return promise
+}
+
+export function installJsonp() {
+  window.__NUXT_JSONP__ = function (chunkId, exports) { chunks[chunkId] = exports }
+  window.__NUXT_JSONP_CACHE__ = chunks
+  window.__NUXT_IMPORT__ = importChunk
+}

+ 110 - 0
.nuxt/loading.html

@@ -0,0 +1,110 @@
+<style>
+#nuxt-loading {
+  background: white;
+  visibility: hidden;
+  opacity: 0;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+  animation: nuxtLoadingIn 10s ease;
+  -webkit-animation: nuxtLoadingIn 10s ease;
+  animation-fill-mode: forwards;
+  overflow: hidden;
+}
+
+@keyframes nuxtLoadingIn {
+  0% {
+    visibility: hidden;
+    opacity: 0;
+  }
+  20% {
+    visibility: visible;
+    opacity: 0;
+  }
+  100% {
+    visibility: visible;
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes nuxtLoadingIn {
+  0% {
+    visibility: hidden;
+    opacity: 0;
+  }
+  20% {
+    visibility: visible;
+    opacity: 0;
+  }
+  100% {
+    visibility: visible;
+    opacity: 1;
+  }
+}
+
+#nuxt-loading>div,
+#nuxt-loading>div:after {
+  border-radius: 50%;
+  width: 5rem;
+  height: 5rem;
+}
+
+#nuxt-loading>div {
+  font-size: 10px;
+  position: relative;
+  text-indent: -9999em;
+  border: .5rem solid #F5F5F5;
+  border-left: .5rem solid black;
+  -webkit-transform: translateZ(0);
+  -ms-transform: translateZ(0);
+  transform: translateZ(0);
+  -webkit-animation: nuxtLoading 1.1s infinite linear;
+  animation: nuxtLoading 1.1s infinite linear;
+}
+
+#nuxt-loading.error>div {
+  border-left: .5rem solid #ff4500;
+  animation-duration: 5s;
+}
+
+@-webkit-keyframes nuxtLoading {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes nuxtLoading {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+</style>
+
+<script>
+window.addEventListener('error', function () {
+  var e = document.getElementById('nuxt-loading');
+  if (e) {
+    e.className += ' error';
+  }
+});
+</script>
+
+<div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div>
+
+<!-- https://projects.lukehaas.me/css-loaders -->

+ 3 - 0
.nuxt/middleware.js

@@ -0,0 +1,3 @@
+const middleware = {}
+
+export default middleware

+ 90 - 0
.nuxt/mixins/fetch.client.js

@@ -0,0 +1,90 @@
+import Vue from 'vue'
+import { hasFetch, normalizeError, addLifecycleHook, createGetCounter } from '../utils'
+
+const isSsrHydration = (vm) => vm.$vnode && vm.$vnode.elm && vm.$vnode.elm.dataset && vm.$vnode.elm.dataset.fetchKey
+const nuxtState = window.__NUXT__
+
+export default {
+  beforeCreate () {
+    if (!hasFetch(this)) {
+      return
+    }
+
+    this._fetchDelay = typeof this.$options.fetchDelay === 'number' ? this.$options.fetchDelay : 200
+
+    Vue.util.defineReactive(this, '$fetchState', {
+      pending: false,
+      error: null,
+      timestamp: Date.now()
+    })
+
+    this.$fetch = $fetch.bind(this)
+    addLifecycleHook(this, 'created', created)
+    addLifecycleHook(this, 'beforeMount', beforeMount)
+  }
+}
+
+function beforeMount() {
+  if (!this._hydrated) {
+    return this.$fetch()
+  }
+}
+
+function created() {
+  if (!isSsrHydration(this)) {
+    return
+  }
+
+  // Hydrate component
+  this._hydrated = true
+  this._fetchKey = this.$vnode.elm.dataset.fetchKey
+  const data = nuxtState.fetch[this._fetchKey]
+
+  // If fetch error
+  if (data && data._error) {
+    this.$fetchState.error = data._error
+    return
+  }
+
+  // Merge data
+  for (const key in data) {
+    Vue.set(this.$data, key, data[key])
+  }
+}
+
+function $fetch() {
+  if (!this._fetchPromise) {
+    this._fetchPromise = $_fetch.call(this)
+      .then(() => { delete this._fetchPromise })
+  }
+  return this._fetchPromise
+}
+
+async function $_fetch() {
+  this.$nuxt.nbFetching++
+  this.$fetchState.pending = true
+  this.$fetchState.error = null
+  this._hydrated = false
+  let error = null
+  const startTime = Date.now()
+
+  try {
+    await this.$options.fetch.call(this)
+  } catch (err) {
+    if (process.dev) {
+      console.error('Error in fetch():', err)
+    }
+    error = normalizeError(err)
+  }
+
+  const delayLeft = this._fetchDelay - (Date.now() - startTime)
+  if (delayLeft > 0) {
+    await new Promise(resolve => setTimeout(resolve, delayLeft))
+  }
+
+  this.$fetchState.error = error
+  this.$fetchState.pending = false
+  this.$fetchState.timestamp = Date.now()
+
+  this.$nextTick(() => this.$nuxt.nbFetching--)
+}

+ 69 - 0
.nuxt/mixins/fetch.server.js

@@ -0,0 +1,69 @@
+import Vue from 'vue'
+import { hasFetch, normalizeError, addLifecycleHook, purifyData, createGetCounter } from '../utils'
+
+async function serverPrefetch() {
+  if (!this._fetchOnServer) {
+    return
+  }
+
+  // Call and await on $fetch
+  try {
+    await this.$options.fetch.call(this)
+  } catch (err) {
+    if (process.dev) {
+      console.error('Error in fetch():', err)
+    }
+    this.$fetchState.error = normalizeError(err)
+  }
+  this.$fetchState.pending = false
+
+  // Define an ssrKey for hydration
+  this._fetchKey = this._fetchKey || this.$ssrContext.fetchCounters['']++
+
+  // Add data-fetch-key on parent element of Component
+  const attrs = this.$vnode.data.attrs = this.$vnode.data.attrs || {}
+  attrs['data-fetch-key'] = this._fetchKey
+
+  // Add to ssrContext for window.__NUXT__.fetch
+
+  if (this.$ssrContext.nuxt.fetch[this._fetchKey] !== undefined) {
+    console.warn(`Duplicate fetch key detected (${this._fetchKey}). This may lead to unexpected results.`)
+  }
+
+  this.$ssrContext.nuxt.fetch[this._fetchKey] =
+    this.$fetchState.error ? { _error: this.$fetchState.error } : purifyData(this._data)
+}
+
+export default {
+  created() {
+    if (!hasFetch(this)) {
+      return
+    }
+
+    if (typeof this.$options.fetchOnServer === 'function') {
+      this._fetchOnServer = this.$options.fetchOnServer.call(this) !== false
+    } else {
+      this._fetchOnServer = this.$options.fetchOnServer !== false
+    }
+
+    const defaultKey = this.$options._scopeId || this.$options.name || ''
+    const getCounter = createGetCounter(this.$ssrContext.fetchCounters, defaultKey)
+
+    if (typeof this.$options.fetchKey === 'function') {
+      this._fetchKey = this.$options.fetchKey.call(this, getCounter)
+    } else {
+      const key = 'string' === typeof this.$options.fetchKey ? this.$options.fetchKey : defaultKey
+      this._fetchKey = key ? key + ':' + getCounter(key) : String(getCounter(key))
+    }
+
+    // Added for remove vue undefined warning while ssr
+    this.$fetch = () => {} // issue #8043
+    Vue.util.defineReactive(this, '$fetchState', {
+      pending: true,
+      error: null,
+      timestamp: Date.now()
+    })
+
+    addLifecycleHook(this, 'serverPrefetch', serverPrefetch)
+  }
+}

+ 273 - 0
.nuxt/router.js

@@ -0,0 +1,273 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+import { normalizeURL, decode } from 'ufo'
+import { interopDefault } from './utils'
+import scrollBehavior from './router.scrollBehavior.js'
+
+const _82724b94 = () => interopDefault(import('..\\pages\\about\\index.vue' /* webpackChunkName: "pages/about/index" */))
+const _39825c08 = () => interopDefault(import('..\\pages\\brand\\index.vue' /* webpackChunkName: "pages/brand/index" */))
+const _064d2cbe = () => interopDefault(import('..\\pages\\case\\index.vue' /* webpackChunkName: "pages/case/index" */))
+const _14ea7583 = () => interopDefault(import('..\\pages\\contact\\index.vue' /* webpackChunkName: "pages/contact/index" */))
+const _7b589bc8 = () => interopDefault(import('..\\pages\\cooperation\\index.vue' /* webpackChunkName: "pages/cooperation/index" */))
+const _f2fd73c4 = () => interopDefault(import('..\\pages\\news\\index.vue' /* webpackChunkName: "pages/news/index" */))
+const _1cee7d17 = () => interopDefault(import('..\\pages\\brand\\detail.vue' /* webpackChunkName: "pages/brand/detail" */))
+const _3f7353a3 = () => interopDefault(import('..\\pages\\brand\\ross.vue' /* webpackChunkName: "pages/brand/ross" */))
+const _3eeac95d = () => interopDefault(import('..\\pages\\contact\\consult.vue' /* webpackChunkName: "pages/contact/consult" */))
+const _20936d2e = () => interopDefault(import('..\\pages\\contact\\job.vue' /* webpackChunkName: "pages/contact/job" */))
+const _da0705dc = () => interopDefault(import('..\\pages\\contact\\join-us.vue' /* webpackChunkName: "pages/contact/join-us" */))
+const _3c0ae596 = () => interopDefault(import('..\\pages\\news\\detail.vue' /* webpackChunkName: "pages/news/detail" */))
+const _750ce5f9 = () => interopDefault(import('..\\pages\\product\\binary-premium.vue' /* webpackChunkName: "pages/product/binary-premium" */))
+const _355b1c76 = () => interopDefault(import('..\\pages\\product\\diactivplus.vue' /* webpackChunkName: "pages/product/diactivplus" */))
+const _6835b704 = () => interopDefault(import('..\\pages\\product\\intradermik.vue' /* webpackChunkName: "pages/product/intradermik" */))
+const _5a9b3dcd = () => interopDefault(import('..\\pages\\product\\kestos.vue' /* webpackChunkName: "pages/product/kestos" */))
+const _1a6f4e21 = () => interopDefault(import('..\\pages\\product\\mesobiolift.vue' /* webpackChunkName: "pages/product/mesobiolift" */))
+const _a9cc653e = () => interopDefault(import('..\\pages\\product\\rollaction.vue' /* webpackChunkName: "pages/product/rollaction" */))
+const _b2576ba4 = () => interopDefault(import('..\\pages\\product\\binary\\therapy-1.vue' /* webpackChunkName: "pages/product/binary/therapy-1" */))
+const _b23b3ca2 = () => interopDefault(import('..\\pages\\product\\binary\\therapy-2.vue' /* webpackChunkName: "pages/product/binary/therapy-2" */))
+const _b21f0da0 = () => interopDefault(import('..\\pages\\product\\binary\\therapy-3.vue' /* webpackChunkName: "pages/product/binary/therapy-3" */))
+const _b202de9e = () => interopDefault(import('..\\pages\\product\\binary\\therapy-4.vue' /* webpackChunkName: "pages/product/binary/therapy-4" */))
+const _08c79791 = () => interopDefault(import('..\\pages\\index.vue' /* webpackChunkName: "pages/index" */))
+
+const emptyFn = () => {}
+
+Vue.use(Router)
+
+export const routerOptions = {
+  mode: 'history',
+  base: '/',
+  linkActiveClass: 'nuxt-link-active',
+  linkExactActiveClass: 'nuxt-link-exact-active',
+  scrollBehavior,
+
+  routes: [{
+    path: "/about",
+    component: _82724b94,
+    redirect: "/about.html",
+    name: "about"
+  }, {
+    path: "/brand",
+    component: _39825c08,
+    redirect: "/brand.html",
+    name: "brand"
+  }, {
+    path: "/case",
+    component: _064d2cbe,
+    redirect: "/case.html",
+    name: "case"
+  }, {
+    path: "/contact",
+    component: _14ea7583,
+    redirect: "/contact.html",
+    name: "contact"
+  }, {
+    path: "/cooperation",
+    component: _7b589bc8,
+    redirect: "/cooperation.html",
+    name: "cooperation"
+  }, {
+    path: "/news",
+    component: _f2fd73c4,
+    redirect: "/news.html",
+    name: "news"
+  }, {
+    path: "/brand/detail",
+    component: _1cee7d17,
+    redirect: "/brand/detail.html",
+    name: "brand-detail"
+  }, {
+    path: "/brand/ross",
+    component: _3f7353a3,
+    redirect: "/brand/ross.html",
+    name: "brand-ross"
+  }, {
+    path: "/contact/consult",
+    component: _3eeac95d,
+    redirect: "/contact/consult.html",
+    name: "contact-consult"
+  }, {
+    path: "/contact/job",
+    component: _20936d2e,
+    redirect: "/contact/job.html",
+    name: "contact-job"
+  }, {
+    path: "/contact/join-us",
+    component: _da0705dc,
+    redirect: "/contact/join-us.html",
+    name: "contact-join-us"
+  }, {
+    path: "/news/detail",
+    component: _3c0ae596,
+    redirect: "/news/detail.html",
+    name: "news-detail"
+  }, {
+    path: "/product/binary-premium",
+    component: _750ce5f9,
+    redirect: "/product/binary-premium.html",
+    name: "product-binary-premium"
+  }, {
+    path: "/product/diactivplus",
+    component: _355b1c76,
+    redirect: "/product/diactivplus.html",
+    name: "product-diactivplus"
+  }, {
+    path: "/product/intradermik",
+    component: _6835b704,
+    redirect: "/product/intradermik.html",
+    name: "product-intradermik"
+  }, {
+    path: "/product/kestos",
+    component: _5a9b3dcd,
+    redirect: "/product/kestos.html",
+    name: "product-kestos"
+  }, {
+    path: "/product/mesobiolift",
+    component: _1a6f4e21,
+    redirect: "/product/mesobiolift.html",
+    name: "product-mesobiolift"
+  }, {
+    path: "/product/rollaction",
+    component: _a9cc653e,
+    redirect: "/product/rollaction.html",
+    name: "product-rollaction"
+  }, {
+    path: "/product/binary/therapy-1",
+    component: _b2576ba4,
+    redirect: "/product/binary/therapy-1.html",
+    name: "product-binary-therapy-1"
+  }, {
+    path: "/product/binary/therapy-2",
+    component: _b23b3ca2,
+    redirect: "/product/binary/therapy-2.html",
+    name: "product-binary-therapy-2"
+  }, {
+    path: "/product/binary/therapy-3",
+    component: _b21f0da0,
+    redirect: "/product/binary/therapy-3.html",
+    name: "product-binary-therapy-3"
+  }, {
+    path: "/product/binary/therapy-4",
+    component: _b202de9e,
+    redirect: "/product/binary/therapy-4.html",
+    name: "product-binary-therapy-4"
+  }, {
+    path: "/",
+    component: _08c79791,
+    redirect: "/index.html",
+    name: "index"
+  }, {
+    path: "/about.html",
+    component: _82724b94,
+    name: "about.html"
+  }, {
+    path: "/brand.html",
+    component: _39825c08,
+    name: "brand.html"
+  }, {
+    path: "/case.html",
+    component: _064d2cbe,
+    name: "case.html"
+  }, {
+    path: "/contact.html",
+    component: _14ea7583,
+    name: "contact.html"
+  }, {
+    path: "/cooperation.html",
+    component: _7b589bc8,
+    name: "cooperation.html"
+  }, {
+    path: "/news.html",
+    component: _f2fd73c4,
+    name: "news.html"
+  }, {
+    path: "/brand/detail.html",
+    component: _1cee7d17,
+    name: "brand-detail.html"
+  }, {
+    path: "/brand/ross.html",
+    component: _3f7353a3,
+    name: "brand-ross.html"
+  }, {
+    path: "/contact/consult.html",
+    component: _3eeac95d,
+    name: "contact-consult.html"
+  }, {
+    path: "/contact/job.html",
+    component: _20936d2e,
+    name: "contact-job.html"
+  }, {
+    path: "/contact/join-us.html",
+    component: _da0705dc,
+    name: "contact-join-us.html"
+  }, {
+    path: "/news/detail.html",
+    component: _3c0ae596,
+    name: "news-detail.html"
+  }, {
+    path: "/product/binary-premium.html",
+    component: _750ce5f9,
+    name: "product-binary-premium.html"
+  }, {
+    path: "/product/diactivplus.html",
+    component: _355b1c76,
+    name: "product-diactivplus.html"
+  }, {
+    path: "/product/intradermik.html",
+    component: _6835b704,
+    name: "product-intradermik.html"
+  }, {
+    path: "/product/kestos.html",
+    component: _5a9b3dcd,
+    name: "product-kestos.html"
+  }, {
+    path: "/product/mesobiolift.html",
+    component: _1a6f4e21,
+    name: "product-mesobiolift.html"
+  }, {
+    path: "/product/rollaction.html",
+    component: _a9cc653e,
+    name: "product-rollaction.html"
+  }, {
+    path: "/product/binary/therapy-1.html",
+    component: _b2576ba4,
+    name: "product-binary-therapy-1.html"
+  }, {
+    path: "/product/binary/therapy-2.html",
+    component: _b23b3ca2,
+    name: "product-binary-therapy-2.html"
+  }, {
+    path: "/product/binary/therapy-3.html",
+    component: _b21f0da0,
+    name: "product-binary-therapy-3.html"
+  }, {
+    path: "/product/binary/therapy-4.html",
+    component: _b202de9e,
+    name: "product-binary-therapy-4.html"
+  }, {
+    path: "/index.html",
+    component: _08c79791,
+    name: "index.html"
+  }],
+
+  fallback: false
+}
+
+export function createRouter (ssrContext, config) {
+  const base = (config._app && config._app.basePath) || routerOptions.base
+  const router = new Router({ ...routerOptions, base  })
+
+  // TODO: remove in Nuxt 3
+  const originalPush = router.push
+  router.push = function push (location, onComplete = emptyFn, onAbort) {
+    return originalPush.call(this, location, onComplete, onAbort)
+  }
+
+  const resolve = router.resolve.bind(router)
+  router.resolve = (to, current, append) => {
+    if (typeof to === 'string') {
+      to = normalizeURL(to)
+    }
+    return resolve(to, current, append)
+  }
+
+  return router
+}

+ 76 - 0
.nuxt/router.scrollBehavior.js

@@ -0,0 +1,76 @@
+import { getMatchedComponents, setScrollRestoration } from './utils'
+
+if (process.client) {
+  if ('scrollRestoration' in window.history) {
+    setScrollRestoration('manual')
+
+    // reset scrollRestoration to auto when leaving page, allowing page reload
+    // and back-navigation from other pages to use the browser to restore the
+    // scrolling position.
+    window.addEventListener('beforeunload', () => {
+      setScrollRestoration('auto')
+    })
+
+    // Setting scrollRestoration to manual again when returning to this page.
+    window.addEventListener('load', () => {
+      setScrollRestoration('manual')
+    })
+  }
+}
+
+function shouldScrollToTop(route) {
+   const Pages = getMatchedComponents(route)
+   if (Pages.length === 1) {
+     const { options = {} } = Pages[0]
+     return options.scrollToTop !== false
+   }
+   return Pages.some(({ options }) => options && options.scrollToTop)
+}
+
+export default function (to, from, savedPosition) {
+  // If the returned position is falsy or an empty object, will retain current scroll position
+  let position = false
+  const isRouteChanged = to !== from
+
+  // savedPosition is only available for popstate navigations (back button)
+  if (savedPosition) {
+    position = savedPosition
+  } else if (isRouteChanged && shouldScrollToTop(to)) {
+    position = { x: 0, y: 0 }
+  }
+
+  const nuxt = window.$nuxt
+
+  if (
+    // Initial load (vuejs/vue-router#3199)
+    !isRouteChanged ||
+    // Route hash changes
+    (to.path === from.path && to.hash !== from.hash)
+  ) {
+    nuxt.$nextTick(() => nuxt.$emit('triggerScroll'))
+  }
+
+  return new Promise((resolve) => {
+    // wait for the out transition to complete (if necessary)
+    nuxt.$once('triggerScroll', () => {
+      // coords will be used if no selector is provided,
+      // or if the selector didn't match any element.
+      if (to.hash) {
+        let hash = to.hash
+        // CSS.escape() is not supported with IE and Edge.
+        if (typeof window.CSS !== 'undefined' && typeof window.CSS.escape !== 'undefined') {
+          hash = '#' + window.CSS.escape(hash.substr(1))
+        }
+        try {
+          if (document.querySelector(hash)) {
+            // scroll to anchor by returning the selector
+            position = { selector: hash }
+          }
+        } catch (e) {
+          console.warn('Failed to save scroll position. Please add CSS.escape() polyfill (https://github.com/mathiasbynens/CSS.escape).')
+        }
+      }
+      resolve(position)
+    })
+  })
+}

+ 347 - 0
.nuxt/routes.json

@@ -0,0 +1,347 @@
+[
+  {
+    "name": "about",
+    "path": "/about",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\about\\\\index.vue",
+    "chunkName": "pages/about/index",
+    "redirect": "/about.html",
+    "_name": "_82724b94"
+  },
+  {
+    "name": "brand",
+    "path": "/brand",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\brand\\\\index.vue",
+    "chunkName": "pages/brand/index",
+    "redirect": "/brand.html",
+    "_name": "_39825c08"
+  },
+  {
+    "name": "case",
+    "path": "/case",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\case\\\\index.vue",
+    "chunkName": "pages/case/index",
+    "redirect": "/case.html",
+    "_name": "_064d2cbe"
+  },
+  {
+    "name": "contact",
+    "path": "/contact",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\index.vue",
+    "chunkName": "pages/contact/index",
+    "redirect": "/contact.html",
+    "_name": "_14ea7583"
+  },
+  {
+    "name": "cooperation",
+    "path": "/cooperation",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\cooperation\\\\index.vue",
+    "chunkName": "pages/cooperation/index",
+    "redirect": "/cooperation.html",
+    "_name": "_7b589bc8"
+  },
+  {
+    "name": "news",
+    "path": "/news",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\news\\\\index.vue",
+    "chunkName": "pages/news/index",
+    "redirect": "/news.html",
+    "_name": "_f2fd73c4"
+  },
+  {
+    "name": "brand-detail",
+    "path": "/brand/detail",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\brand\\\\detail.vue",
+    "chunkName": "pages/brand/detail",
+    "redirect": "/brand/detail.html",
+    "_name": "_1cee7d17"
+  },
+  {
+    "name": "brand-ross",
+    "path": "/brand/ross",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\brand\\\\ross.vue",
+    "chunkName": "pages/brand/ross",
+    "redirect": "/brand/ross.html",
+    "_name": "_3f7353a3"
+  },
+  {
+    "name": "contact-consult",
+    "path": "/contact/consult",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\consult.vue",
+    "chunkName": "pages/contact/consult",
+    "redirect": "/contact/consult.html",
+    "_name": "_3eeac95d"
+  },
+  {
+    "name": "contact-job",
+    "path": "/contact/job",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\job.vue",
+    "chunkName": "pages/contact/job",
+    "redirect": "/contact/job.html",
+    "_name": "_20936d2e"
+  },
+  {
+    "name": "contact-join-us",
+    "path": "/contact/join-us",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\join-us.vue",
+    "chunkName": "pages/contact/join-us",
+    "redirect": "/contact/join-us.html",
+    "_name": "_da0705dc"
+  },
+  {
+    "name": "news-detail",
+    "path": "/news/detail",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\news\\\\detail.vue",
+    "chunkName": "pages/news/detail",
+    "redirect": "/news/detail.html",
+    "_name": "_3c0ae596"
+  },
+  {
+    "name": "product-binary-premium",
+    "path": "/product/binary-premium",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary-premium.vue",
+    "chunkName": "pages/product/binary-premium",
+    "redirect": "/product/binary-premium.html",
+    "_name": "_750ce5f9"
+  },
+  {
+    "name": "product-diactivplus",
+    "path": "/product/diactivplus",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\diactivplus.vue",
+    "chunkName": "pages/product/diactivplus",
+    "redirect": "/product/diactivplus.html",
+    "_name": "_355b1c76"
+  },
+  {
+    "name": "product-intradermik",
+    "path": "/product/intradermik",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\intradermik.vue",
+    "chunkName": "pages/product/intradermik",
+    "redirect": "/product/intradermik.html",
+    "_name": "_6835b704"
+  },
+  {
+    "name": "product-kestos",
+    "path": "/product/kestos",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\kestos.vue",
+    "chunkName": "pages/product/kestos",
+    "redirect": "/product/kestos.html",
+    "_name": "_5a9b3dcd"
+  },
+  {
+    "name": "product-mesobiolift",
+    "path": "/product/mesobiolift",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\mesobiolift.vue",
+    "chunkName": "pages/product/mesobiolift",
+    "redirect": "/product/mesobiolift.html",
+    "_name": "_1a6f4e21"
+  },
+  {
+    "name": "product-rollaction",
+    "path": "/product/rollaction",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\rollaction.vue",
+    "chunkName": "pages/product/rollaction",
+    "redirect": "/product/rollaction.html",
+    "_name": "_a9cc653e"
+  },
+  {
+    "name": "product-binary-therapy-1",
+    "path": "/product/binary/therapy-1",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-1.vue",
+    "chunkName": "pages/product/binary/therapy-1",
+    "redirect": "/product/binary/therapy-1.html",
+    "_name": "_b2576ba4"
+  },
+  {
+    "name": "product-binary-therapy-2",
+    "path": "/product/binary/therapy-2",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-2.vue",
+    "chunkName": "pages/product/binary/therapy-2",
+    "redirect": "/product/binary/therapy-2.html",
+    "_name": "_b23b3ca2"
+  },
+  {
+    "name": "product-binary-therapy-3",
+    "path": "/product/binary/therapy-3",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-3.vue",
+    "chunkName": "pages/product/binary/therapy-3",
+    "redirect": "/product/binary/therapy-3.html",
+    "_name": "_b21f0da0"
+  },
+  {
+    "name": "product-binary-therapy-4",
+    "path": "/product/binary/therapy-4",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-4.vue",
+    "chunkName": "pages/product/binary/therapy-4",
+    "redirect": "/product/binary/therapy-4.html",
+    "_name": "_b202de9e"
+  },
+  {
+    "name": "index",
+    "path": "/",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\index.vue",
+    "chunkName": "pages/index",
+    "redirect": "/index.html",
+    "_name": "_08c79791"
+  },
+  {
+    "name": "about.html",
+    "path": "/about.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\about\\\\index.vue",
+    "chunkName": "pages/about/index",
+    "_name": "_82724b94"
+  },
+  {
+    "name": "brand.html",
+    "path": "/brand.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\brand\\\\index.vue",
+    "chunkName": "pages/brand/index",
+    "_name": "_39825c08"
+  },
+  {
+    "name": "case.html",
+    "path": "/case.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\case\\\\index.vue",
+    "chunkName": "pages/case/index",
+    "_name": "_064d2cbe"
+  },
+  {
+    "name": "contact.html",
+    "path": "/contact.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\index.vue",
+    "chunkName": "pages/contact/index",
+    "_name": "_14ea7583"
+  },
+  {
+    "name": "cooperation.html",
+    "path": "/cooperation.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\cooperation\\\\index.vue",
+    "chunkName": "pages/cooperation/index",
+    "_name": "_7b589bc8"
+  },
+  {
+    "name": "news.html",
+    "path": "/news.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\news\\\\index.vue",
+    "chunkName": "pages/news/index",
+    "_name": "_f2fd73c4"
+  },
+  {
+    "name": "brand-detail.html",
+    "path": "/brand/detail.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\brand\\\\detail.vue",
+    "chunkName": "pages/brand/detail",
+    "_name": "_1cee7d17"
+  },
+  {
+    "name": "brand-ross.html",
+    "path": "/brand/ross.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\brand\\\\ross.vue",
+    "chunkName": "pages/brand/ross",
+    "_name": "_3f7353a3"
+  },
+  {
+    "name": "contact-consult.html",
+    "path": "/contact/consult.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\consult.vue",
+    "chunkName": "pages/contact/consult",
+    "_name": "_3eeac95d"
+  },
+  {
+    "name": "contact-job.html",
+    "path": "/contact/job.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\job.vue",
+    "chunkName": "pages/contact/job",
+    "_name": "_20936d2e"
+  },
+  {
+    "name": "contact-join-us.html",
+    "path": "/contact/join-us.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\contact\\\\join-us.vue",
+    "chunkName": "pages/contact/join-us",
+    "_name": "_da0705dc"
+  },
+  {
+    "name": "news-detail.html",
+    "path": "/news/detail.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\news\\\\detail.vue",
+    "chunkName": "pages/news/detail",
+    "_name": "_3c0ae596"
+  },
+  {
+    "name": "product-binary-premium.html",
+    "path": "/product/binary-premium.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary-premium.vue",
+    "chunkName": "pages/product/binary-premium",
+    "_name": "_750ce5f9"
+  },
+  {
+    "name": "product-diactivplus.html",
+    "path": "/product/diactivplus.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\diactivplus.vue",
+    "chunkName": "pages/product/diactivplus",
+    "_name": "_355b1c76"
+  },
+  {
+    "name": "product-intradermik.html",
+    "path": "/product/intradermik.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\intradermik.vue",
+    "chunkName": "pages/product/intradermik",
+    "_name": "_6835b704"
+  },
+  {
+    "name": "product-kestos.html",
+    "path": "/product/kestos.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\kestos.vue",
+    "chunkName": "pages/product/kestos",
+    "_name": "_5a9b3dcd"
+  },
+  {
+    "name": "product-mesobiolift.html",
+    "path": "/product/mesobiolift.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\mesobiolift.vue",
+    "chunkName": "pages/product/mesobiolift",
+    "_name": "_1a6f4e21"
+  },
+  {
+    "name": "product-rollaction.html",
+    "path": "/product/rollaction.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\rollaction.vue",
+    "chunkName": "pages/product/rollaction",
+    "_name": "_a9cc653e"
+  },
+  {
+    "name": "product-binary-therapy-1.html",
+    "path": "/product/binary/therapy-1.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-1.vue",
+    "chunkName": "pages/product/binary/therapy-1",
+    "_name": "_b2576ba4"
+  },
+  {
+    "name": "product-binary-therapy-2.html",
+    "path": "/product/binary/therapy-2.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-2.vue",
+    "chunkName": "pages/product/binary/therapy-2",
+    "_name": "_b23b3ca2"
+  },
+  {
+    "name": "product-binary-therapy-3.html",
+    "path": "/product/binary/therapy-3.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-3.vue",
+    "chunkName": "pages/product/binary/therapy-3",
+    "_name": "_b21f0da0"
+  },
+  {
+    "name": "product-binary-therapy-4.html",
+    "path": "/product/binary/therapy-4.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\product\\\\binary\\\\therapy-4.vue",
+    "chunkName": "pages/product/binary/therapy-4",
+    "_name": "_b202de9e"
+  },
+  {
+    "name": "index.html",
+    "path": "/index.html",
+    "component": "C:\\\\Users\\\\Administrator\\\\Desktop\\\\work\\\\caimei-authentic-website-ross\\\\pages\\\\index.vue",
+    "chunkName": "pages/index",
+    "_name": "_08c79791"
+  }
+]

+ 288 - 0
.nuxt/server.js

@@ -0,0 +1,288 @@
+import Vue from 'vue'
+import { joinURL, normalizeURL, withQuery } from 'ufo'
+import fetch from 'node-fetch'
+import middleware from './middleware.js'
+import {
+  applyAsyncData,
+  middlewareSeries,
+  sanitizeComponent,
+  getMatchedComponents,
+  promisify
+} from './utils.js'
+import fetchMixin from './mixins/fetch.server'
+import { createApp, NuxtError } from './index.js'
+import NuxtLink from './components/nuxt-link.server.js' // should be included after ./index.js
+
+// Update serverPrefetch strategy
+Vue.config.optionMergeStrategies.serverPrefetch = Vue.config.optionMergeStrategies.created
+
+// Fetch mixin
+if (!Vue.__nuxt__fetch__mixin__) {
+  Vue.mixin(fetchMixin)
+  Vue.__nuxt__fetch__mixin__ = true
+}
+
+if (!Vue.__original_use__) {
+  Vue.__original_use__ = Vue.use
+  Vue.__install_times__ = 0
+  Vue.use = function (plugin, ...args) {
+    plugin.__nuxt_external_installed__ = Vue._installedPlugins.includes(plugin)
+    return Vue.__original_use__(plugin, ...args)
+  }
+}
+if (Vue.__install_times__ === 2) {
+  Vue.__install_times__ = 0
+  Vue._installedPlugins = Vue._installedPlugins.filter(plugin => {
+    return plugin.__nuxt_external_installed__ === true
+  })
+}
+Vue.__install_times__++
+
+// Component: <NuxtLink>
+Vue.component(NuxtLink.name, NuxtLink)
+Vue.component('NLink', NuxtLink)
+
+if (!global.fetch) { global.fetch = fetch }
+
+const noopApp = () => new Vue({ render: h => h('div', { domProps: { id: '__nuxt' } }) })
+
+const createNext = ssrContext => (opts) => {
+  // If static target, render on client-side
+  ssrContext.redirected = opts
+  if (ssrContext.target === 'static' || !ssrContext.res) {
+    ssrContext.nuxt.serverRendered = false
+    return
+  }
+  let fullPath = withQuery(opts.path, opts.query)
+  const $config = ssrContext.runtimeConfig || {}
+  const routerBase = ($config._app && $config._app.basePath) || '/'
+  if (!fullPath.startsWith('http') && (routerBase !== '/' && !fullPath.startsWith(routerBase))) {
+    fullPath = joinURL(routerBase, fullPath)
+  }
+  // Avoid loop redirect
+  if (decodeURI(fullPath) === decodeURI(ssrContext.url)) {
+    ssrContext.redirected = false
+    return
+  }
+  ssrContext.res.writeHead(opts.status, {
+    Location: normalizeURL(fullPath)
+  })
+  ssrContext.res.end()
+}
+
+// This exported function will be called by `bundleRenderer`.
+// This is where we perform data-prefetching to determine the
+// state of our application before actually rendering it.
+// Since data fetching is async, this function is expected to
+// return a Promise that resolves to the app instance.
+export default async (ssrContext) => {
+  // Create ssrContext.next for simulate next() of beforeEach() when wanted to redirect
+  ssrContext.redirected = false
+  ssrContext.next = createNext(ssrContext)
+  // Used for beforeNuxtRender({ Components, nuxtState })
+  ssrContext.beforeRenderFns = []
+  // Nuxt object (window.{{globals.context}}, defaults to window.__NUXT__)
+  ssrContext.nuxt = { layout: 'default', data: [], fetch: {}, error: null, serverRendered: true, routePath: '' }
+
+    ssrContext.fetchCounters = {}
+
+  // Remove query from url is static target
+
+  // Public runtime config
+  ssrContext.nuxt.config = ssrContext.runtimeConfig.public
+  if (ssrContext.nuxt.config._app) {
+    __webpack_public_path__ = joinURL(ssrContext.nuxt.config._app.cdnURL, ssrContext.nuxt.config._app.assetsPath)
+  }
+  // Create the app definition and the instance (created for each request)
+  const { app, router } = await createApp(ssrContext, ssrContext.runtimeConfig.private)
+  const _app = new Vue(app)
+  // Add ssr route path to nuxt context so we can account for page navigation between ssr and csr
+  ssrContext.nuxt.routePath = app.context.route.path
+
+  // Add meta infos (used in renderer.js)
+  ssrContext.meta = _app.$meta()
+
+  // Keep asyncData for each matched component in ssrContext (used in app/utils.js via this.$ssrContext)
+  ssrContext.asyncData = {}
+
+  const beforeRender = async () => {
+    // Call beforeNuxtRender() methods
+    await Promise.all(ssrContext.beforeRenderFns.map(fn => promisify(fn, { Components, nuxtState: ssrContext.nuxt })))
+  }
+
+  const renderErrorPage = async () => {
+    // Don't server-render the page in static target
+    if (ssrContext.target === 'static') {
+      ssrContext.nuxt.serverRendered = false
+    }
+
+    // Load layout for error page
+    const layout = (NuxtError.options || NuxtError).layout
+    const errLayout = typeof layout === 'function' ? layout.call(NuxtError, app.context) : layout
+    ssrContext.nuxt.layout = errLayout || 'default'
+    await _app.loadLayout(errLayout)
+    _app.setLayout(errLayout)
+
+    await beforeRender()
+    return _app
+  }
+  const render404Page = () => {
+    app.context.error({ statusCode: 404, path: ssrContext.url, message: 'This page could not be found' })
+    return renderErrorPage()
+  }
+
+  const s = Date.now()
+
+  // Components are already resolved by setContext -> getRouteData (app/utils.js)
+  const Components = getMatchedComponents(app.context.route)
+
+  /*
+  ** Call global middleware (nuxt.config.js)
+  */
+  let midd = []
+  midd = midd.map((name) => {
+    if (typeof name === 'function') {
+      return name
+    }
+    if (typeof middleware[name] !== 'function') {
+      app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name })
+    }
+    return middleware[name]
+  })
+  await middlewareSeries(midd, app.context)
+  // ...If there is a redirect or an error, stop the process
+  if (ssrContext.redirected) {
+    return noopApp()
+  }
+  if (ssrContext.nuxt.error) {
+    return renderErrorPage()
+  }
+
+  /*
+  ** Set layout
+  */
+  let layout = Components.length ? Components[0].options.layout : NuxtError.layout
+  if (typeof layout === 'function') {
+    layout = layout(app.context)
+  }
+  await _app.loadLayout(layout)
+  if (ssrContext.nuxt.error) {
+    return renderErrorPage()
+  }
+  layout = _app.setLayout(layout)
+  ssrContext.nuxt.layout = _app.layoutName
+
+  /*
+  ** Call middleware (layout + pages)
+  */
+  midd = []
+
+  layout = sanitizeComponent(layout)
+  if (layout.options.middleware) {
+    midd = midd.concat(layout.options.middleware)
+  }
+
+  Components.forEach((Component) => {
+    if (Component.options.middleware) {
+      midd = midd.concat(Component.options.middleware)
+    }
+  })
+  midd = midd.map((name) => {
+    if (typeof name === 'function') {
+      return name
+    }
+    if (typeof middleware[name] !== 'function') {
+      app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name })
+    }
+    return middleware[name]
+  })
+  await middlewareSeries(midd, app.context)
+  // ...If there is a redirect or an error, stop the process
+  if (ssrContext.redirected) {
+    return noopApp()
+  }
+  if (ssrContext.nuxt.error) {
+    return renderErrorPage()
+  }
+
+  /*
+  ** Call .validate()
+  */
+  let isValid = true
+  try {
+    for (const Component of Components) {
+      if (typeof Component.options.validate !== 'function') {
+        continue
+      }
+
+      isValid = await Component.options.validate(app.context)
+
+      if (!isValid) {
+        break
+      }
+    }
+  } catch (validationError) {
+    // ...If .validate() threw an error
+    app.context.error({
+      statusCode: validationError.statusCode || '500',
+      message: validationError.message
+    })
+    return renderErrorPage()
+  }
+
+  // ...If .validate() returned false
+  if (!isValid) {
+    // Render a 404 error page
+    return render404Page()
+  }
+
+  // If no Components found, returns 404
+  if (!Components.length) {
+    return render404Page()
+  }
+
+  // Call asyncData & fetch hooks on components matched by the route.
+  const asyncDatas = await Promise.all(Components.map((Component) => {
+    const promises = []
+
+    // Call asyncData(context)
+    if (Component.options.asyncData && typeof Component.options.asyncData === 'function') {
+      const promise = promisify(Component.options.asyncData, app.context)
+      promise.then((asyncDataResult) => {
+        ssrContext.asyncData[Component.cid] = asyncDataResult
+        applyAsyncData(Component)
+        return asyncDataResult
+      })
+      promises.push(promise)
+    } else {
+      promises.push(null)
+    }
+
+    // Call fetch(context)
+    if (Component.options.fetch && Component.options.fetch.length) {
+      promises.push(Component.options.fetch(app.context))
+    } else {
+      promises.push(null)
+    }
+
+    return Promise.all(promises)
+  }))
+
+  if (process.env.DEBUG && asyncDatas.length) console.debug('Data fetching ' + ssrContext.url + ': ' + (Date.now() - s) + 'ms')
+
+  // datas are the first row of each
+  ssrContext.nuxt.data = asyncDatas.map(r => r[0] || {})
+
+  // ...If there is a redirect or an error, stop the process
+  if (ssrContext.redirected) {
+    return noopApp()
+  }
+  if (ssrContext.nuxt.error) {
+    return renderErrorPage()
+  }
+
+  // Call beforeNuxtRender methods & add store state
+  await beforeRender()
+
+  return _app
+}

+ 630 - 0
.nuxt/utils.js

@@ -0,0 +1,630 @@
+import Vue from 'vue'
+import { isSamePath as _isSamePath, joinURL, normalizeURL, withQuery, withoutTrailingSlash } from 'ufo'
+
+// window.{{globals.loadedCallback}} hook
+// Useful for jsdom testing or plugins (https://github.com/tmpvar/jsdom#dealing-with-asynchronous-script-loading)
+if (process.client) {
+  window.onNuxtReadyCbs = []
+  window.onNuxtReady = (cb) => {
+    window.onNuxtReadyCbs.push(cb)
+  }
+}
+
+export function createGetCounter (counterObject, defaultKey = '') {
+  return function getCounter (id = defaultKey) {
+    if (counterObject[id] === undefined) {
+      counterObject[id] = 0
+    }
+    return counterObject[id]++
+  }
+}
+
+export function empty () {}
+
+export function globalHandleError (error) {
+  if (Vue.config.errorHandler) {
+    Vue.config.errorHandler(error)
+  }
+}
+
+export function interopDefault (promise) {
+  return promise.then(m => m.default || m)
+}
+
+export function hasFetch(vm) {
+  return vm.$options && typeof vm.$options.fetch === 'function' && !vm.$options.fetch.length
+}
+export function purifyData(data) {
+  if (process.env.NODE_ENV === 'production') {
+    return data
+  }
+
+  return Object.entries(data).filter(
+    ([key, value]) => {
+      const valid = !(value instanceof Function) && !(value instanceof Promise)
+      if (!valid) {
+        console.warn(`${key} is not able to be stringified. This will break in a production environment.`)
+      }
+      return valid
+    }
+    ).reduce((obj, [key, value]) => {
+      obj[key] = value
+      return obj
+    }, {})
+}
+export function getChildrenComponentInstancesUsingFetch(vm, instances = []) {
+  const children = vm.$children || []
+  for (const child of children) {
+    if (child.$fetch) {
+      instances.push(child)
+      continue; // Don't get the children since it will reload the template
+    }
+    if (child.$children) {
+      getChildrenComponentInstancesUsingFetch(child, instances)
+    }
+  }
+  return instances
+}
+
+export function applyAsyncData (Component, asyncData) {
+  if (
+    // For SSR, we once all this function without second param to just apply asyncData
+    // Prevent doing this for each SSR request
+    !asyncData && Component.options.__hasNuxtData
+  ) {
+    return
+  }
+
+  const ComponentData = Component.options._originDataFn || Component.options.data || function () { return {} }
+  Component.options._originDataFn = ComponentData
+
+  Component.options.data = function () {
+    const data = ComponentData.call(this, this)
+    if (this.$ssrContext) {
+      asyncData = this.$ssrContext.asyncData[Component.cid]
+    }
+    return { ...data, ...asyncData }
+  }
+
+  Component.options.__hasNuxtData = true
+
+  if (Component._Ctor && Component._Ctor.options) {
+    Component._Ctor.options.data = Component.options.data
+  }
+}
+
+export function sanitizeComponent (Component) {
+  // If Component already sanitized
+  if (Component.options && Component._Ctor === Component) {
+    return Component
+  }
+  if (!Component.options) {
+    Component = Vue.extend(Component) // fix issue #6
+    Component._Ctor = Component
+  } else {
+    Component._Ctor = Component
+    Component.extendOptions = Component.options
+  }
+  // If no component name defined, set file path as name, (also fixes #5703)
+  if (!Component.options.name && Component.options.__file) {
+    Component.options.name = Component.options.__file
+  }
+  return Component
+}
+
+export function getMatchedComponents (route, matches = false, prop = 'components') {
+  return Array.prototype.concat.apply([], route.matched.map((m, index) => {
+    return Object.keys(m[prop]).map((key) => {
+      matches && matches.push(index)
+      return m[prop][key]
+    })
+  }))
+}
+
+export function getMatchedComponentsInstances (route, matches = false) {
+  return getMatchedComponents(route, matches, 'instances')
+}
+
+export function flatMapComponents (route, fn) {
+  return Array.prototype.concat.apply([], route.matched.map((m, index) => {
+    return Object.keys(m.components).reduce((promises, key) => {
+      if (m.components[key]) {
+        promises.push(fn(m.components[key], m.instances[key], m, key, index))
+      } else {
+        delete m.components[key]
+      }
+      return promises
+    }, [])
+  }))
+}
+
+export function resolveRouteComponents (route, fn) {
+  return Promise.all(
+    flatMapComponents(route, async (Component, instance, match, key) => {
+      // If component is a function, resolve it
+      if (typeof Component === 'function' && !Component.options) {
+        try {
+          Component = await Component()
+        } catch (error) {
+          // Handle webpack chunk loading errors
+          // This may be due to a new deployment or a network problem
+          if (
+            error &&
+            error.name === 'ChunkLoadError' &&
+            typeof window !== 'undefined' &&
+            window.sessionStorage
+          ) {
+            const timeNow = Date.now()
+            const previousReloadTime = parseInt(window.sessionStorage.getItem('nuxt-reload'))
+
+            // check for previous reload time not to reload infinitely
+            if (!previousReloadTime || previousReloadTime + 60000 < timeNow) {
+              window.sessionStorage.setItem('nuxt-reload', timeNow)
+              window.location.reload(true /* skip cache */)
+            }
+          }
+
+          throw error
+        }
+      }
+      match.components[key] = Component = sanitizeComponent(Component)
+      return typeof fn === 'function' ? fn(Component, instance, match, key) : Component
+    })
+  )
+}
+
+export async function getRouteData (route) {
+  if (!route) {
+    return
+  }
+  // Make sure the components are resolved (code-splitting)
+  await resolveRouteComponents(route)
+  // Send back a copy of route with meta based on Component definition
+  return {
+    ...route,
+    meta: getMatchedComponents(route).map((Component, index) => {
+      return { ...Component.options.meta, ...(route.matched[index] || {}).meta }
+    })
+  }
+}
+
+export async function setContext (app, context) {
+  // If context not defined, create it
+  if (!app.context) {
+    app.context = {
+      isStatic: process.static,
+      isDev: true,
+      isHMR: false,
+      app,
+
+      payload: context.payload,
+      error: context.error,
+      base: app.router.options.base,
+      env: {}
+    }
+    // Only set once
+
+    if (context.req) {
+      app.context.req = context.req
+    }
+    if (context.res) {
+      app.context.res = context.res
+    }
+
+    if (context.ssrContext) {
+      app.context.ssrContext = context.ssrContext
+    }
+    app.context.redirect = (status, path, query) => {
+      if (!status) {
+        return
+      }
+      app.context._redirected = true
+      // if only 1 or 2 arguments: redirect('/') or redirect('/', { foo: 'bar' })
+      let pathType = typeof path
+      if (typeof status !== 'number' && (pathType === 'undefined' || pathType === 'object')) {
+        query = path || {}
+        path = status
+        pathType = typeof path
+        status = 302
+      }
+      if (pathType === 'object') {
+        path = app.router.resolve(path).route.fullPath
+      }
+      // "/absolute/route", "./relative/route" or "../relative/route"
+      if (/(^[.]{1,2}\/)|(^\/(?!\/))/.test(path)) {
+        app.context.next({
+          path,
+          query,
+          status
+        })
+      } else {
+        path = withQuery(path, query)
+        if (process.server) {
+          app.context.next({
+            path,
+            status
+          })
+        }
+        if (process.client) {
+          // https://developer.mozilla.org/en-US/docs/Web/API/Location/replace
+          window.location.replace(path)
+
+          // Throw a redirect error
+          throw new Error('ERR_REDIRECT')
+        }
+      }
+    }
+    if (process.server) {
+      app.context.beforeNuxtRender = fn => context.beforeRenderFns.push(fn)
+    }
+    if (process.client) {
+      app.context.nuxtState = window.__NUXT__
+    }
+  }
+
+  // Dynamic keys
+  const [currentRouteData, fromRouteData] = await Promise.all([
+    getRouteData(context.route),
+    getRouteData(context.from)
+  ])
+
+  if (context.route) {
+    app.context.route = currentRouteData
+  }
+
+  if (context.from) {
+    app.context.from = fromRouteData
+  }
+
+  app.context.next = context.next
+  app.context._redirected = false
+  app.context._errored = false
+  app.context.isHMR = Boolean(context.isHMR)
+  app.context.params = app.context.route.params || {}
+  app.context.query = app.context.route.query || {}
+}
+
+export function middlewareSeries (promises, appContext) {
+  if (!promises.length || appContext._redirected || appContext._errored) {
+    return Promise.resolve()
+  }
+  return promisify(promises[0], appContext)
+    .then(() => {
+      return middlewareSeries(promises.slice(1), appContext)
+    })
+}
+
+export function promisify (fn, context) {
+  let promise
+  if (fn.length === 2) {
+      console.warn('Callback-based asyncData, fetch or middleware calls are deprecated. ' +
+        'Please switch to promises or async/await syntax')
+
+    // fn(context, callback)
+    promise = new Promise((resolve) => {
+      fn(context, function (err, data) {
+        if (err) {
+          context.error(err)
+        }
+        data = data || {}
+        resolve(data)
+      })
+    })
+  } else {
+    promise = fn(context)
+  }
+
+  if (promise && promise instanceof Promise && typeof promise.then === 'function') {
+    return promise
+  }
+  return Promise.resolve(promise)
+}
+
+// Imported from vue-router
+export function getLocation (base, mode) {
+  if (mode === 'hash') {
+    return window.location.hash.replace(/^#\//, '')
+  }
+
+  base = decodeURI(base).slice(0, -1) // consideration is base is normalized with trailing slash
+  let path = decodeURI(window.location.pathname)
+
+  if (base && path.startsWith(base)) {
+    path = path.slice(base.length)
+  }
+
+  const fullPath = (path || '/') + window.location.search + window.location.hash
+
+  return normalizeURL(fullPath)
+}
+
+// Imported from path-to-regexp
+
+/**
+ * Compile a string to a template function for the path.
+ *
+ * @param  {string}             str
+ * @param  {Object=}            options
+ * @return {!function(Object=, Object=)}
+ */
+export function compile (str, options) {
+  return tokensToFunction(parse(str, options), options)
+}
+
+export function getQueryDiff (toQuery, fromQuery) {
+  const diff = {}
+  const queries = { ...toQuery, ...fromQuery }
+  for (const k in queries) {
+    if (String(toQuery[k]) !== String(fromQuery[k])) {
+      diff[k] = true
+    }
+  }
+  return diff
+}
+
+export function normalizeError (err) {
+  let message
+  if (!(err.message || typeof err === 'string')) {
+    try {
+      message = JSON.stringify(err, null, 2)
+    } catch (e) {
+      message = `[${err.constructor.name}]`
+    }
+  } else {
+    message = err.message || err
+  }
+  return {
+    ...err,
+    message,
+    statusCode: (err.statusCode || err.status || (err.response && err.response.status) || 500)
+  }
+}
+
+/**
+ * The main path matching regexp utility.
+ *
+ * @type {RegExp}
+ */
+const PATH_REGEXP = new RegExp([
+  // Match escaped characters that would otherwise appear in future matches.
+  // This allows the user to escape special characters that won't transform.
+  '(\\\\.)',
+  // Match Express-style parameters and un-named parameters with a prefix
+  // and optional suffixes. Matches appear as:
+  //
+  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
+  // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
+  // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
+  '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
+].join('|'), 'g')
+
+/**
+ * Parse a string for the raw tokens.
+ *
+ * @param  {string}  str
+ * @param  {Object=} options
+ * @return {!Array}
+ */
+function parse (str, options) {
+  const tokens = []
+  let key = 0
+  let index = 0
+  let path = ''
+  const defaultDelimiter = (options && options.delimiter) || '/'
+  let res
+
+  while ((res = PATH_REGEXP.exec(str)) != null) {
+    const m = res[0]
+    const escaped = res[1]
+    const offset = res.index
+    path += str.slice(index, offset)
+    index = offset + m.length
+
+    // Ignore already escaped sequences.
+    if (escaped) {
+      path += escaped[1]
+      continue
+    }
+
+    const next = str[index]
+    const prefix = res[2]
+    const name = res[3]
+    const capture = res[4]
+    const group = res[5]
+    const modifier = res[6]
+    const asterisk = res[7]
+
+    // Push the current path onto the tokens.
+    if (path) {
+      tokens.push(path)
+      path = ''
+    }
+
+    const partial = prefix != null && next != null && next !== prefix
+    const repeat = modifier === '+' || modifier === '*'
+    const optional = modifier === '?' || modifier === '*'
+    const delimiter = res[2] || defaultDelimiter
+    const pattern = capture || group
+
+    tokens.push({
+      name: name || key++,
+      prefix: prefix || '',
+      delimiter,
+      optional,
+      repeat,
+      partial,
+      asterisk: Boolean(asterisk),
+      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
+    })
+  }
+
+  // Match any characters still remaining.
+  if (index < str.length) {
+    path += str.substr(index)
+  }
+
+  // If the path exists, push it onto the end.
+  if (path) {
+    tokens.push(path)
+  }
+
+  return tokens
+}
+
+/**
+ * Prettier encoding of URI path segments.
+ *
+ * @param  {string}
+ * @return {string}
+ */
+function encodeURIComponentPretty (str, slashAllowed) {
+  const re = slashAllowed ? /[?#]/g : /[/?#]/g
+  return encodeURI(str).replace(re, (c) => {
+    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
+  })
+}
+
+/**
+ * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
+ *
+ * @param  {string}
+ * @return {string}
+ */
+function encodeAsterisk (str) {
+  return encodeURIComponentPretty(str, true)
+}
+
+/**
+ * Escape a regular expression string.
+ *
+ * @param  {string} str
+ * @return {string}
+ */
+function escapeString (str) {
+  return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1')
+}
+
+/**
+ * Escape the capturing group by escaping special characters and meaning.
+ *
+ * @param  {string} group
+ * @return {string}
+ */
+function escapeGroup (group) {
+  return group.replace(/([=!:$/()])/g, '\\$1')
+}
+
+/**
+ * Expose a method for transforming tokens into the path function.
+ */
+function tokensToFunction (tokens, options) {
+  // Compile all the tokens into regexps.
+  const matches = new Array(tokens.length)
+
+  // Compile all the patterns before compilation.
+  for (let i = 0; i < tokens.length; i++) {
+    if (typeof tokens[i] === 'object') {
+      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))
+    }
+  }
+
+  return function (obj, opts) {
+    let path = ''
+    const data = obj || {}
+    const options = opts || {}
+    const encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent
+
+    for (let i = 0; i < tokens.length; i++) {
+      const token = tokens[i]
+
+      if (typeof token === 'string') {
+        path += token
+
+        continue
+      }
+
+      const value = data[token.name || 'pathMatch']
+      let segment
+
+      if (value == null) {
+        if (token.optional) {
+          // Prepend partial segment prefixes.
+          if (token.partial) {
+            path += token.prefix
+          }
+
+          continue
+        } else {
+          throw new TypeError('Expected "' + token.name + '" to be defined')
+        }
+      }
+
+      if (Array.isArray(value)) {
+        if (!token.repeat) {
+          throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
+        }
+
+        if (value.length === 0) {
+          if (token.optional) {
+            continue
+          } else {
+            throw new TypeError('Expected "' + token.name + '" to not be empty')
+          }
+        }
+
+        for (let j = 0; j < value.length; j++) {
+          segment = encode(value[j])
+
+          if (!matches[i].test(segment)) {
+            throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
+          }
+
+          path += (j === 0 ? token.prefix : token.delimiter) + segment
+        }
+
+        continue
+      }
+
+      segment = token.asterisk ? encodeAsterisk(value) : encode(value)
+
+      if (!matches[i].test(segment)) {
+        throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
+      }
+
+      path += token.prefix + segment
+    }
+
+    return path
+  }
+}
+
+/**
+ * Get the flags for a regexp from the options.
+ *
+ * @param  {Object} options
+ * @return {string}
+ */
+function flags (options) {
+  return options && options.sensitive ? '' : 'i'
+}
+
+export function addLifecycleHook(vm, hook, fn) {
+  if (!vm.$options[hook]) {
+    vm.$options[hook] = []
+  }
+  if (!vm.$options[hook].includes(fn)) {
+    vm.$options[hook].push(fn)
+  }
+}
+
+export const urlJoin = joinURL
+
+export const stripTrailingSlash = withoutTrailingSlash
+
+export const isSamePath = _isSamePath
+
+export function setScrollRestoration (newVal) {
+  try {
+    window.history.scrollRestoration = newVal;
+  } catch(e) {}
+}

+ 8 - 0
.nuxt/vetur/tags.json

@@ -0,0 +1,8 @@
+{
+  "ContactConsult": {
+    "description": "Auto imported from components/ContactConsult/index.vue"
+  },
+  "ContactJoinUs": {
+    "description": "Auto imported from components/ContactJoinUs/index.vue"
+  }
+}

+ 9 - 0
.nuxt/views/app.template.html

@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html {{ HTML_ATTRS }}>
+  <head {{ HEAD_ATTRS }}>
+    {{ HEAD }}
+  </head>
+  <body {{ BODY_ATTRS }}>
+    {{ APP }}
+  </body>
+</html>

+ 23 - 0
.nuxt/views/error.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Server error</title>
+<meta charset="utf-8">
+<meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" name=viewport>
+<style>
+.__nuxt-error-page{padding: 1rem;background:#f7f8fb;color:#47494e;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-family:sans-serif;font-weight:100!important;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;position:absolute;top:0;left:0;right:0;bottom:0}.__nuxt-error-page .error{max-width:450px}.__nuxt-error-page .title{font-size:24px;font-size:1.5rem;margin-top:15px;color:#47494e;margin-bottom:8px}.__nuxt-error-page .description{color:#7f828b;line-height:21px;margin-bottom:10px}.__nuxt-error-page a{color:#7f828b!important;text-decoration:none}.__nuxt-error-page .logo{position:fixed;left:12px;bottom:12px}
+</style>
+</head>
+<body>
+  <div class="__nuxt-error-page">
+    <div class="error">
+        <svg xmlns="http://www.w3.org/2000/svg" width="90" height="90" fill="#DBE1EC" viewBox="0 0 48 48"><path d="M22 30h4v4h-4zm0-16h4v12h-4zm1.99-10C12.94 4 4 12.95 4 24s8.94 20 19.99 20S44 35.05 44 24 35.04 4 23.99 4zM24 40c-8.84 0-16-7.16-16-16S15.16 8 24 8s16 7.16 16 16-7.16 16-16 16z"/></svg>
+        <div class="title">Server error</div>
+        <div class="description">{{ message }}</div>
+    </div>
+    <div class="logo">
+      <a href="https://nuxtjs.org" target="_blank" rel="noopener">Nuxt</a>
+    </div>
+  </div>
+</body>
+</html>

二进制
node_modules/.cache/babel-loader/0387792f4d384416560f7e358dc7ba821f4f8edb810d360314db52e1eabad7f6.json.gz


二进制
node_modules/.cache/babel-loader/039368a4ad9a575b880c0aeeda39353ffeb328317d8ff447881205514280b8d9.json.gz


二进制
node_modules/.cache/babel-loader/0463fcdfcee53f864996f9f6cbc5c906d037f872454bb45e9bccbd893af7a676.json.gz


二进制
node_modules/.cache/babel-loader/050af38993e4bc7fd1ee656ee1114487681810b50f53ddfe0d0c08aab8e26ca9.json.gz


二进制
node_modules/.cache/babel-loader/06fcbf0e1918764e94b62f5dd3bfa5ad9985043c7e3ecfb7c739752d4280eb7d.json.gz


二进制
node_modules/.cache/babel-loader/072c2901b5b095625a8979ecda8f160e79a31d5cb53af28812a04306490b4b8f.json.gz


二进制
node_modules/.cache/babel-loader/0ab7d6688781ef8055b2c88116bffb67535f624054ecccddd393785566aa4d92.json.gz


二进制
node_modules/.cache/babel-loader/0c43389055476ee9761b591c2a2e5d7b841274d8fb796b51d57f93028b36f802.json.gz


二进制
node_modules/.cache/babel-loader/0e91345eba2a938d3c5d36e77ab24627896a944859ee3ba654c2bfc0961634c2.json.gz


二进制
node_modules/.cache/babel-loader/0eb7920067297f44053e72da2699101d69e668db064ba61d0867863a70d15be8.json.gz


二进制
node_modules/.cache/babel-loader/0fd28f4c38ede053dd5a87d2a3f02c7b96d4a9864ee24daa3f7bc5570642d4a4.json.gz


二进制
node_modules/.cache/babel-loader/102a6ae056b2667681b36072f43e0ed23d64ca92c4ccf6984b7506e14d821b74.json.gz


二进制
node_modules/.cache/babel-loader/106e28c87ea17a29d2cd1e9d7ce8bdcde18f809b978c47d68787557f8cfbcfab.json.gz


二进制
node_modules/.cache/babel-loader/1125b6988292c1c6db5e889815148dd147dfed148a755a18a500872737f92b32.json.gz


二进制
node_modules/.cache/babel-loader/129e88ee106c5caace4de66771773638457604da1edda819a801dd2d35408f2c.json.gz


二进制
node_modules/.cache/babel-loader/13022130bcc51c0701994321ab7938c7eadd8f3d528d28ebea6c95c43de31454.json.gz


二进制
node_modules/.cache/babel-loader/13ccdad5f4c35181a3d67f903aa72fdd3876118dd2a6fc392ca683a482bfefb7.json.gz


二进制
node_modules/.cache/babel-loader/140652aa8e7f2bdb947ea9e84c95a2c9f20ec1fb6e34a20ee840674825db6685.json.gz


二进制
node_modules/.cache/babel-loader/14340a44c9f15ffec68896bfda83082b3e174865eb823b98e8848166c91aecdd.json.gz


二进制
node_modules/.cache/babel-loader/14601e6e3a0fe76714be6bddafd5a80ae922d5475c7bc323ab520b9c08554d86.json.gz


二进制
node_modules/.cache/babel-loader/1514597c7a120070a0a72536ad6a145d1a216bd88bac75cabc9c1fecf17ed810.json.gz


二进制
node_modules/.cache/babel-loader/15331127254f49e0b75304118c05e435c4894772b3e220f042685695b4a7cbfe.json.gz


二进制
node_modules/.cache/babel-loader/1b42c183cbe38d3fedc555aedfa65550c815be58e82d0e1751147e648343fc7a.json.gz


二进制
node_modules/.cache/babel-loader/1bf32249ae2b6578526f9208dc793f4475b3f8024e17514933fb25b10baa3d7c.json.gz


二进制
node_modules/.cache/babel-loader/1c4dcfbeccc1c3fa6739a373bb9a6f70047eb7386bef022049fcd2b521d16050.json.gz


二进制
node_modules/.cache/babel-loader/1d28018eb20159ae4e13552f9cb1360cdab5c1169c2cd027fd76cbeda9f2a003.json.gz


二进制
node_modules/.cache/babel-loader/1e0bbe96af2aa399e5259127f619f96744e54d07483dfe8aaceca7ce60b7532a.json.gz


二进制
node_modules/.cache/babel-loader/1ec0b84f906feb3aaf1fd69ed44f990a9f3d45921f6af3598fa394f420fd50d0.json.gz


二进制
node_modules/.cache/babel-loader/1f85390ded4a60abde40fa9aea4394d817c0cdf9da225c62749478094e2e0f77.json.gz


二进制
node_modules/.cache/babel-loader/20b1ee02787ce9df71f9a79b4b8733aa38fedcb44d6918a71813b36b25e93e6d.json.gz


二进制
node_modules/.cache/babel-loader/25130f97f5654cf96df8faf6be1c5ea5b5df77082ec64a831206b95c17f423d4.json.gz


二进制
node_modules/.cache/babel-loader/25958d9c3fcad67dcfea3e6cf431d8b8fb5dd2de1466ffc8320b2f8bf77c034e.json.gz


二进制
node_modules/.cache/babel-loader/2868fc19b2552dd0f2439daeb1bdd2ab999ada06858b736550c80c0f7c579370.json.gz


二进制
node_modules/.cache/babel-loader/29b35e517ce7925f962b7bf0061d2bec959a4e0b4badef9c2431ddc6c692d8dd.json.gz


二进制
node_modules/.cache/babel-loader/2d35b715176fa22b2e317437c0b743ef01f50beb1e27f233f034c233ab618a6b.json.gz


二进制
node_modules/.cache/babel-loader/2dbd4e5bdaf181651e507dc299b57633b1b2eb5b65a5c8e2b5717ec6979af15a.json.gz


二进制
node_modules/.cache/babel-loader/2ec27ad3ce9c7bbaaba22129f7317ab2d09f3e016eb75b4018e739d981084108.json.gz


二进制
node_modules/.cache/babel-loader/2fd57de87628f1dfbfcf2518fe3afb892522ab0afdf50d5b43c34dc9289cdea1.json.gz


二进制
node_modules/.cache/babel-loader/30967d052b30e6c8ec023883be3616bc6c8e7492949fe757bb9875c791e8c080.json.gz


二进制
node_modules/.cache/babel-loader/31a453432740599dcd20ff5d6f8e2d255eb0a5800e1004c866b34b40995a95f3.json.gz


二进制
node_modules/.cache/babel-loader/3409d254d61dc7a1cf682072c0b522e9a520d105db4ef20cf76c66e9ded4953b.json.gz


二进制
node_modules/.cache/babel-loader/3635339a948bda5bdfe56184e43624fc9ae19d0ad93fceb9a24577827205c991.json.gz


二进制
node_modules/.cache/babel-loader/3a939aaf7a764ff485e70720d9da2ae034bf6855835baff766aa150f845265c3.json.gz


二进制
node_modules/.cache/babel-loader/3effcc03aa15763631ae599998eff8882a62dad9736ec8ba10294f3e7a3c1ccc.json.gz


二进制
node_modules/.cache/babel-loader/3f49efa8f3b5d02d7ba285d58a2bcfa6b043900870c641b2b557fd0f5306c91f.json.gz


二进制
node_modules/.cache/babel-loader/42780c7055786073fcf03604d9fb5b8865fa13c36bf52f921f221caa47ce7c53.json.gz


二进制
node_modules/.cache/babel-loader/46851989b7b56934660573f8a34b8dd78cff40c982720e66c557d1bba6c8653d.json.gz


二进制
node_modules/.cache/babel-loader/4700edf6cf529c4089e667634179958ef1a694f132b39334ff51ad81f8ed70aa.json.gz


二进制
node_modules/.cache/babel-loader/471d865c7dce6142f88a8e524c47512766c31183309aa8d56c4e89191a4f34c8.json.gz


二进制
node_modules/.cache/babel-loader/4aba121fcf08ab121f59ace7673150adf40cb44032c18da0a2d17dbd324d2f09.json.gz


二进制
node_modules/.cache/babel-loader/4bbe59ecd44e16ead8f13d13826adc90071e731462bdadc6e84cebc6b695dbed.json.gz


二进制
node_modules/.cache/babel-loader/4e1b601a3a0bb7ea0494cbf841a2416cb090a422b108c0c03dea78b9693659d5.json.gz


二进制
node_modules/.cache/babel-loader/59aaedb16febdec230f963b2dbfa52b95e476d690da5e276a4fb3f0a8bc6a0b3.json.gz


二进制
node_modules/.cache/babel-loader/5ae755eba4c7d7778c94bf98f725b80c997748c3b38d91e02983ce4e145939ec.json.gz


二进制
node_modules/.cache/babel-loader/5ca044f91944c2b78cf924004003cd743210fd23f076a3ad1a3826178a8d3660.json.gz


二进制
node_modules/.cache/babel-loader/5d41358e1986d4b4ada685ca4289515da882a0d887bc3795b5b97861d02107ff.json.gz


二进制
node_modules/.cache/babel-loader/5ef524f37c141c8ac8584b264567c59410befb0d626f0b47eb77ee3fd3d09c73.json.gz


二进制
node_modules/.cache/babel-loader/5fc737bfee4615a89af558e649175752f61545601310c78bb73046b99d8d6dd2.json.gz


二进制
node_modules/.cache/babel-loader/60f083f3a6cfd93d01e63bf9cfb6e0144bc4ffa3de77bb33f71a4e7ad2f01aca.json.gz


二进制
node_modules/.cache/babel-loader/6239ed641759ca51266f5e6f8f590564c739a1605ec82e7b11a8ba7f430be97d.json.gz


二进制
node_modules/.cache/babel-loader/6269e7b64095b505742884e3c990d49ee5ab5cc8137a4058deff24f8558da219.json.gz


二进制
node_modules/.cache/babel-loader/65f2836be53dcaa72e3cf5486cddc626049c5c854c0becbebe9272e60c8d61df.json.gz


二进制
node_modules/.cache/babel-loader/66f4a5bded281b3bcdd9e56b6f4ede2e44f7fda82de379d933aebd5fe70cad39.json.gz


二进制
node_modules/.cache/babel-loader/671628da6eaa67fd9970aca10e39d9dcbdb8709361556ddcae59c7c0151c6b9a.json.gz


二进制
node_modules/.cache/babel-loader/67206bf2ca4d2b2e22c68f88c2191b838db27e5b89e6ef61235ef78e7b2b5580.json.gz


二进制
node_modules/.cache/babel-loader/6c20b3f6d9b639028124f2d257ae47c91b54e923029a222d2a50b548d38dae42.json.gz


二进制
node_modules/.cache/babel-loader/6d0b21a259379a06a09b24a90c42c1019a3daff3e2771c2ac96951f3a1ca1893.json.gz


二进制
node_modules/.cache/babel-loader/71a143102c987bc5c534da899b7bb035af6df135e50d950cb6ba9ba82a9f6044.json.gz


二进制
node_modules/.cache/babel-loader/74eab73a11330368509fa6fbac34b37e14a961826ee36a44d5d271ec3011473f.json.gz


二进制
node_modules/.cache/babel-loader/75feb3410654b4a83635cb9d04606a57d35fa5b202ea94d67b55ccafe1fe5d21.json.gz


二进制
node_modules/.cache/babel-loader/7659ab3b29c0413e6015ef500778d63b1afcd07c5f9567f9c817ec643a1c1617.json.gz


二进制
node_modules/.cache/babel-loader/77931d815fb6b46c81ddee6d4e469d9041147b8219d552635926efcd75a4b74a.json.gz


二进制
node_modules/.cache/babel-loader/77a1b48f8e5d039f83798766e9beab2bbb18af1353003a900b57d3c1ad42a067.json.gz


部分文件因为文件数量过多而无法显示