Bläddra i källkod

commit message

peach 2 år sedan
incheckning
a19a732be8
100 ändrade filer med 6331 tillägg och 0 borttagningar
  1. 8 0
      .idea/.gitignore
  2. 9 0
      .idea/gs_nuxt.iml
  3. 6 0
      .idea/inspectionProfiles/Project_Default.xml
  4. 6 0
      .idea/misc.xml
  5. 8 0
      .idea/modules.xml
  6. 6 0
      .idea/vcs.xml
  7. 206 0
      .nuxt/App.js
  8. 820 0
      .nuxt/client.js
  9. 44 0
      .nuxt/components/index.js
  10. 143 0
      .nuxt/components/nuxt-build-indicator.vue
  11. 122 0
      .nuxt/components/nuxt-child.js
  12. 98 0
      .nuxt/components/nuxt-error.vue
  13. 98 0
      .nuxt/components/nuxt-link.client.js
  14. 16 0
      .nuxt/components/nuxt-link.server.js
  15. 177 0
      .nuxt/components/nuxt-loading.vue
  16. 101 0
      .nuxt/components/nuxt.js
  17. 7 0
      .nuxt/components/plugin.js
  18. 21 0
      .nuxt/components/readme.md
  19. 1 0
      .nuxt/empty.js
  20. 229 0
      .nuxt/index.js
  21. 82 0
      .nuxt/jsonp.js
  22. 3 0
      .nuxt/layouts/default.vue
  23. 110 0
      .nuxt/loading.html
  24. 3 0
      .nuxt/middleware.js
  25. 90 0
      .nuxt/mixins/fetch.client.js
  26. 69 0
      .nuxt/mixins/fetch.server.js
  27. 83 0
      .nuxt/router.js
  28. 76 0
      .nuxt/router.scrollBehavior.js
  29. 58 0
      .nuxt/routes.json
  30. 288 0
      .nuxt/server.js
  31. 630 0
      .nuxt/utils.js
  32. 41 0
      .nuxt/vetur/tags.json
  33. 9 0
      .nuxt/views/app.template.html
  34. 23 0
      .nuxt/views/error.html
  35. 8 0
      assets/scss/element-variables.scss
  36. 44 0
      components/ElNav.vue
  37. 106 0
      components/FootBar.vue
  38. 162 0
      components/HeadBar.vue
  39. 28 0
      components/LTInfo.vue
  40. 46 0
      components/LTProgress.vue
  41. 19 0
      components/NuxtLogo.vue
  42. 101 0
      components/Pagination/index.vue
  43. 367 0
      components/SearchList.vue
  44. 122 0
      components/Tutorial.vue
  45. 225 0
      components/WordEditor.vue
  46. 57 0
      components/WordInfo.vue
  47. 228 0
      components/WordList.vue
  48. 262 0
      components/WordType.vue
  49. 15 0
      node_modules/.bin/JSONStream
  50. 17 0
      node_modules/.bin/JSONStream.cmd
  51. 18 0
      node_modules/.bin/JSONStream.ps1
  52. 15 0
      node_modules/.bin/acorn
  53. 17 0
      node_modules/.bin/acorn.cmd
  54. 18 0
      node_modules/.bin/acorn.ps1
  55. 15 0
      node_modules/.bin/ansi-html
  56. 17 0
      node_modules/.bin/ansi-html.cmd
  57. 18 0
      node_modules/.bin/ansi-html.ps1
  58. 15 0
      node_modules/.bin/atob
  59. 17 0
      node_modules/.bin/atob.cmd
  60. 18 0
      node_modules/.bin/atob.ps1
  61. 15 0
      node_modules/.bin/autoprefixer
  62. 17 0
      node_modules/.bin/autoprefixer.cmd
  63. 18 0
      node_modules/.bin/autoprefixer.ps1
  64. 15 0
      node_modules/.bin/babylon
  65. 17 0
      node_modules/.bin/babylon.cmd
  66. 18 0
      node_modules/.bin/babylon.ps1
  67. 15 0
      node_modules/.bin/browserslist
  68. 17 0
      node_modules/.bin/browserslist.cmd
  69. 18 0
      node_modules/.bin/browserslist.ps1
  70. 15 0
      node_modules/.bin/commitlint
  71. 17 0
      node_modules/.bin/commitlint.cmd
  72. 18 0
      node_modules/.bin/commitlint.ps1
  73. 15 0
      node_modules/.bin/conventional-commits-parser
  74. 17 0
      node_modules/.bin/conventional-commits-parser.cmd
  75. 18 0
      node_modules/.bin/conventional-commits-parser.ps1
  76. 15 0
      node_modules/.bin/cross-env
  77. 15 0
      node_modules/.bin/cross-env-shell
  78. 17 0
      node_modules/.bin/cross-env-shell.cmd
  79. 18 0
      node_modules/.bin/cross-env-shell.ps1
  80. 17 0
      node_modules/.bin/cross-env.cmd
  81. 18 0
      node_modules/.bin/cross-env.ps1
  82. 15 0
      node_modules/.bin/css-beautify
  83. 17 0
      node_modules/.bin/css-beautify.cmd
  84. 18 0
      node_modules/.bin/css-beautify.ps1
  85. 15 0
      node_modules/.bin/css-blank-pseudo
  86. 17 0
      node_modules/.bin/css-blank-pseudo.cmd
  87. 18 0
      node_modules/.bin/css-blank-pseudo.ps1
  88. 15 0
      node_modules/.bin/css-has-pseudo
  89. 17 0
      node_modules/.bin/css-has-pseudo.cmd
  90. 18 0
      node_modules/.bin/css-has-pseudo.ps1
  91. 15 0
      node_modules/.bin/css-prefers-color-scheme
  92. 17 0
      node_modules/.bin/css-prefers-color-scheme.cmd
  93. 18 0
      node_modules/.bin/css-prefers-color-scheme.ps1
  94. 15 0
      node_modules/.bin/cssesc
  95. 17 0
      node_modules/.bin/cssesc.cmd
  96. 18 0
      node_modules/.bin/cssesc.ps1
  97. 15 0
      node_modules/.bin/editorconfig
  98. 17 0
      node_modules/.bin/editorconfig.cmd
  99. 18 0
      node_modules/.bin/editorconfig.ps1
  100. 15 0
      node_modules/.bin/errno

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 9 - 0
.idea/gs_nuxt.iml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 6 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="Stylelint" enabled="true" level="ERROR" enabled_by_default="true" />
+  </profile>
+</component>

+ 6 - 0
.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/gs_nuxt.iml" filepath="$PROJECT_DIR$/.idea/gs_nuxt.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 206 - 0
.nuxt/App.js

@@ -0,0 +1,206 @@
+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 '..\\node_modules\\element-ui\\lib\\theme-chalk\\index.css'
+
+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
+    },
+  },
+
+  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)
+      }
+    })
+  })
+}

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

@@ -0,0 +1,44 @@
+export { default as ElNav } from '../..\\components\\ElNav.vue'
+export { default as FootBar } from '../..\\components\\FootBar.vue'
+export { default as HeadBar } from '../..\\components\\HeadBar.vue'
+export { default as LTInfo } from '../..\\components\\LTInfo.vue'
+export { default as LTProgress } from '../..\\components\\LTProgress.vue'
+export { default as NuxtLogo } from '../..\\components\\NuxtLogo.vue'
+export { default as SearchList } from '../..\\components\\SearchList.vue'
+export { default as Tutorial } from '../..\\components\\Tutorial.vue'
+export { default as WordEditor } from '../..\\components\\WordEditor.vue'
+export { default as WordInfo } from '../..\\components\\WordInfo.vue'
+export { default as WordList } from '../..\\components\\WordList.vue'
+export { default as WordType } from '../..\\components\\WordType.vue'
+export { default as Pagination } from '../..\\components\\Pagination\\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])
+}

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

@@ -0,0 +1,21 @@
+# 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.
+
+- `<ElNav>` | `<el-nav>` (components/ElNav.vue)
+- `<FootBar>` | `<foot-bar>` (components/FootBar.vue)
+- `<HeadBar>` | `<head-bar>` (components/HeadBar.vue)
+- `<LTInfo>` | `<l-t-info>` (components/LTInfo.vue)
+- `<LTProgress>` | `<l-t-progress>` (components/LTProgress.vue)
+- `<NuxtLogo>` | `<nuxt-logo>` (components/NuxtLogo.vue)
+- `<SearchList>` | `<search-list>` (components/SearchList.vue)
+- `<Tutorial>` | `<tutorial>` (components/Tutorial.vue)
+- `<WordEditor>` | `<word-editor>` (components/WordEditor.vue)
+- `<WordInfo>` | `<word-info>` (components/WordInfo.vue)
+- `<WordList>` | `<word-list>` (components/WordList.vue)
+- `<WordType>` | `<word-type>` (components/WordType.vue)
+- `<Pagination>` | `<pagination>` (components/Pagination/index.vue)

+ 1 - 0
.nuxt/empty.js

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

+ 229 - 0
.nuxt/index.js

@@ -0,0 +1,229 @@
+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_00dbd983 from 'nuxt_plugin_plugin_00dbd983' // Source: .\\components\\plugin.js (mode: 'all')
+import nuxt_plugin_elementui_d905880e from 'nuxt_plugin_elementui_d905880e' // Source: ..\\plugins\\element-ui (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":"gs_nuxt","htmlAttrs":{"lang":"en"},"meta":[{"charset":"utf-8"},{"name":"viewport","content":"width=device-width, initial-scale=1"},{"hid":"description","name":"description","content":""},{"name":"format-detection","content":"telephone=no"}],"link":[{"rel":"icon","type":"image\u002Fx-icon","href":"\u002Ffavicon.ico"}],"style":[],"script":[]},
+
+    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_00dbd983 === 'function') {
+    await nuxt_plugin_plugin_00dbd983(app.context, inject)
+  }
+
+  if (typeof nuxt_plugin_elementui_d905880e === 'function') {
+    await nuxt_plugin_elementui_d905880e(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
+}

+ 3 - 0
.nuxt/layouts/default.vue

@@ -0,0 +1,3 @@
+<template>
+  <Nuxt />
+</template>

+ 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)
+  }
+}

+ 83 - 0
.nuxt/router.js

@@ -0,0 +1,83 @@
+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 _294a513f = () => interopDefault(import('..\\pages\\association\\index.vue' /* webpackChunkName: "pages/association/index" */))
+const _110b9b8e = () => interopDefault(import('..\\pages\\classic\\index.vue' /* webpackChunkName: "pages/classic/index" */))
+const _683e67b2 = () => interopDefault(import('..\\pages\\editor\\index.vue' /* webpackChunkName: "pages/editor/index" */))
+const _6407bd6c = () => interopDefault(import('..\\pages\\joinus\\index.vue' /* webpackChunkName: "pages/joinus/index" */))
+const _0819c62c = () => interopDefault(import('..\\pages\\word\\index.vue' /* webpackChunkName: "pages/word/index" */))
+const _062accae = () => interopDefault(import('..\\pages\\info\\_id.vue' /* webpackChunkName: "pages/info/_id" */))
+const _05c20866 = () => interopDefault(import('..\\pages\\searchInfo\\_id.vue' /* webpackChunkName: "pages/searchInfo/_id" */))
+const _6fc9a934 = () => 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: "/association",
+    component: _294a513f,
+    name: "association"
+  }, {
+    path: "/classic",
+    component: _110b9b8e,
+    name: "classic"
+  }, {
+    path: "/editor",
+    component: _683e67b2,
+    name: "editor"
+  }, {
+    path: "/joinus",
+    component: _6407bd6c,
+    name: "joinus"
+  }, {
+    path: "/word",
+    component: _0819c62c,
+    name: "word"
+  }, {
+    path: "/info/:id?",
+    component: _062accae,
+    name: "info-id"
+  }, {
+    path: "/searchInfo/:id?",
+    component: _05c20866,
+    name: "searchInfo-id"
+  }, {
+    path: "/",
+    component: _6fc9a934,
+    name: "index"
+  }],
+
+  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)
+    })
+  })
+}

+ 58 - 0
.nuxt/routes.json

@@ -0,0 +1,58 @@
+[
+  {
+    "name": "association",
+    "path": "/association",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\association\\\\index.vue",
+    "chunkName": "pages/association/index",
+    "_name": "_294a513f"
+  },
+  {
+    "name": "classic",
+    "path": "/classic",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\classic\\\\index.vue",
+    "chunkName": "pages/classic/index",
+    "_name": "_110b9b8e"
+  },
+  {
+    "name": "editor",
+    "path": "/editor",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\editor\\\\index.vue",
+    "chunkName": "pages/editor/index",
+    "_name": "_683e67b2"
+  },
+  {
+    "name": "joinus",
+    "path": "/joinus",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\joinus\\\\index.vue",
+    "chunkName": "pages/joinus/index",
+    "_name": "_6407bd6c"
+  },
+  {
+    "name": "word",
+    "path": "/word",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\word\\\\index.vue",
+    "chunkName": "pages/word/index",
+    "_name": "_0819c62c"
+  },
+  {
+    "name": "info-id",
+    "path": "/info/:id?",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\info\\\\_id.vue",
+    "chunkName": "pages/info/_id",
+    "_name": "_062accae"
+  },
+  {
+    "name": "searchInfo-id",
+    "path": "/searchInfo/:id?",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\searchInfo\\\\_id.vue",
+    "chunkName": "pages/searchInfo/_id",
+    "_name": "_05c20866"
+  },
+  {
+    "name": "index",
+    "path": "/",
+    "component": "H:\\\\gs_nuxt\\\\pages\\\\index.vue",
+    "chunkName": "pages/index",
+    "_name": "_6fc9a934"
+  }
+]

+ 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: {"BASE_URL":"localhost:8090/website/","NODE_ENV":"development"}
+    }
+    // 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) {}
+}

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

@@ -0,0 +1,41 @@
+{
+  "ElNav": {
+    "description": "Auto imported from components/ElNav.vue"
+  },
+  "FootBar": {
+    "description": "Auto imported from components/FootBar.vue"
+  },
+  "HeadBar": {
+    "description": "Auto imported from components/HeadBar.vue"
+  },
+  "LTInfo": {
+    "description": "Auto imported from components/LTInfo.vue"
+  },
+  "LTProgress": {
+    "description": "Auto imported from components/LTProgress.vue"
+  },
+  "NuxtLogo": {
+    "description": "Auto imported from components/NuxtLogo.vue"
+  },
+  "SearchList": {
+    "description": "Auto imported from components/SearchList.vue"
+  },
+  "Tutorial": {
+    "description": "Auto imported from components/Tutorial.vue"
+  },
+  "WordEditor": {
+    "description": "Auto imported from components/WordEditor.vue"
+  },
+  "WordInfo": {
+    "description": "Auto imported from components/WordInfo.vue"
+  },
+  "WordList": {
+    "description": "Auto imported from components/WordList.vue"
+  },
+  "WordType": {
+    "description": "Auto imported from components/WordType.vue"
+  },
+  "Pagination": {
+    "description": "Auto imported from components/Pagination/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>

+ 8 - 0
assets/scss/element-variables.scss

@@ -0,0 +1,8 @@
+/* 改变主题色变量aaa */
+$--color-primary: green;
+
+/* 改变 icon 字体路径变量,必需 */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+
+@import "~element-ui/packages/theme-chalk/src/index"; // 这个地方后面要 改成 样式按需引入,请继续看下文
+

+ 44 - 0
components/ElNav.vue

@@ -0,0 +1,44 @@
+<template>
+  <div>
+    <!--叶子级菜单-->
+    <template v-if="item.navInfoList && item.navInfoList.length === 0">
+      <el-menu-item :key="item.navId" :index="item.navUrl">
+        {{item.navTitle}}
+      </el-menu-item>
+    </template>
+    <!--父级菜单-->
+    <el-submenu v-else :index="item.navUrl" style="text-align: left">
+<!--      <span slot="title" style="font-size: 17px;">-->
+<!--        <i :class="item.iconCls"></i>-->
+        {{item.navTitle}}
+<!--      </span>-->
+      <template v-for="child in item.navInfoList">
+        <navigation-item v-if="child.navInfoList && child.navInfoList.length>0" :key="child.navId" :item="child"/>
+        <el-menu-item v-else :key="child.navId" :index="child.navUrl">
+<!--          <i :class="child.icon"></i>-->
+          {{child.navTitle}}
+        </el-menu-item>
+      </template>
+    </el-submenu>
+
+  </div>
+
+
+</template>
+
+<script>
+export default {
+  name: "ElNav",
+  props: {
+    item: {
+      type: Object,
+      required: true
+    }
+  }
+
+}
+</script>
+
+<style scoped>
+
+</style>

+ 106 - 0
components/FootBar.vue

@@ -0,0 +1,106 @@
+<template>
+<div>
+  <el-container>
+    <el-main style="padding: 0">
+      <el-row style="margin-top: 10px">
+        <el-col :span="18" offset="3">
+          <el-divider></el-divider>
+<!--          <el-row>
+            <el-col :span="6" style="text-align: center">
+              <span>关于机构</span><br>
+              <span>关于我们</span><br>
+              <span>人员图片</span><br>
+            </el-col>
+            <el-col :span="6" style="text-align: center">
+              <span>动态新闻</span><br>
+              <span>新闻发布</span><br>
+              <span>新闻专题</span><br>
+            </el-col>
+            <el-col :span="6" style="text-align: center">
+              <span>产品服务</span><br>
+              <span>服务专题</span><br>
+              <span>便民服务</span><br>
+            </el-col>
+            <el-col :span="6" style="text-align: center">
+              <span>研究成果</span><br>
+              <span>研究专题</span><br>
+              <span>研究表明</span><br>
+            </el-col>
+
+
+          </el-row>-->
+          <el-row style="margin: 25px">
+            <el-col :span="6" style="text-align: center">
+              <span><strong>关于机构</strong></span><br>
+              <span>关于我们</span><br>
+              <span>人员图片</span><br>
+            </el-col>
+            <el-col :span="6" style="text-align: center">
+              <span><strong>动态新闻</strong></span><br>
+              <span>新闻发布</span><br>
+              <span>新闻专题</span><br>
+            </el-col>
+            <el-col :span="6" style="text-align: center">
+              <span><strong>产品服务</strong></span><br>
+              <span>服务专题</span><br>
+              <span>便民服务</span><br>
+            </el-col>
+            <el-col :span="6" style="text-align: center">
+              <span><strong>研究成果</strong></span><br>
+              <span>研究专题</span><br>
+              <span>研究表明</span><br>
+            </el-col>
+          </el-row>
+<!--          <el-divider></el-divider>-->
+          <el-row>
+            <el-col :span="13" style="padding-left: 30px">
+              <img style="max-height: 55px" src="/img/lt_logo.png" alt="">
+              <br>
+              <span>关于机构</span>   <el-divider direction="vertical"></el-divider>
+              <span>动态新闻</span>   <el-divider direction="vertical"></el-divider>
+              <span>服务产品</span>   <el-divider direction="vertical"></el-divider>
+              <span>研究成果</span>   <el-divider direction="vertical"></el-divider>
+              <span>数据发布</span>   <el-divider direction="vertical"></el-divider>
+              <span>典型案例</span>  <el-divider direction="vertical"></el-divider>
+              <span>中关村论坛</span>
+            </el-col>
+            <el-col :span="11">
+              <el-row>
+<!--                <el-col :span="24" ><span>扫码关注</span></el-col>-->
+                <el-col :span="8" style="text-align: center">
+                  <img style="max-height: 100px" src="/img/erwei.jpg" alt="">
+                </el-col>
+                <el-col :span="16" style="text-align: left">
+                  <span>扫描关注微信</span><br>
+                  <span>电话:010-60306792</span><br>
+                  <span>邮箱:396140986@qq.com</span><br>
+                  <span>地址:北京市天星街甲1号院8号楼12层</span>
+
+                </el-col>
+
+              </el-row>
+            </el-col>
+            <el-col :span="24" style="margin-top: 15px; text-align: center">
+              中关村新时代公共资源市场化配置促进中心版权所有Copyright © 2016 All Rights Reserved. <br>
+              <a style="text-decoration: none;" href="https://beian.miit.gov.cn/" target="_blank">京ICP备19021110号-1</a>
+            </el-col>
+          </el-row>
+        </el-col>
+      </el-row>
+
+
+    </el-main>
+
+  </el-container>
+
+
+</div>
+</template>
+
+<script>
+export default {
+  name: "FootBar"
+}
+</script>
+
+

+ 162 - 0
components/HeadBar.vue

@@ -0,0 +1,162 @@
+<template>
+<div>
+  <el-container>
+    <el-backtop></el-backtop>
+   <el-main style="padding: 0">
+     <el-row>
+       <el-col :span="10" :offset="4">
+       <nuxt-link to="/">
+         <img style="max-height: 70px" src="/img/lt_logo.png" alt="">
+       </nuxt-link>
+       </el-col>
+       <el-col :span="8">
+
+         <el-row>
+           <el-col :span="5">
+             <div style="line-height: 70px;text-align: center;font-size: 1.3rem">
+               <span>登录</span>
+               <span>注册</span>
+
+             </div>
+           </el-col>
+           <el-col :span="10">
+
+             <div style="line-height: 70px;text-align: center;margin-right:10px">
+               <el-input v-model="searchValue"  class="inline-input" placeholder="请输入内容"  >
+
+
+
+                   <el-button @click="to_search()" slot="append" icon="el-icon-search"></el-button>
+
+
+
+               </el-input>
+
+             </div>
+
+
+           </el-col>
+           <el-col :span="3">
+
+           <div style="margin: 10px">
+             <div class="demo-basic--circle">
+               <div class="block"><el-avatar :size="50" src="//cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"></el-avatar></div>
+               <div class="block" v-for="size in sizeList" :key="size">
+                 <el-avatar :size="size" :src="circleUrl"></el-avatar>
+               </div>
+             </div>
+           </div>
+
+           </el-col>
+         </el-row>
+
+
+
+       </el-col>
+
+     </el-row>
+
+   </el-main>
+  <el-footer  style="background-color: #4D4D4D;">
+    <el-row>
+      <el-col :span="18" offset="3">
+
+
+
+          <el-menu
+
+                    class="el-menu-demo"
+                    mode="horizontal"
+                    router
+                    background-color="#4D4D4D"
+
+                    text-color="#fff"
+
+          >
+
+            <template v-for="(item,i) in nav_list">
+              <el-submenu v-if="item.navInfos.length !=0" :index="item.navUrl" :key="item.navId">
+                <template slot="title">
+
+<!--                  <n-link style="text-decoration: none;" :to="{name:'Association',params:{id: item.navId,title:item.navTitle}}">{{item.navTitle}}-->
+<!--                  </n-link>-->
+                  {{ item.navTitle }}
+                </template>
+                <el-menu-item
+                  v-for="(items, key) in item.navInfos"
+                  :key="key"
+                  :index="items.navUrl"
+                >
+                  {{ items.navTitle }}
+                </el-menu-item>
+              </el-submenu>
+              <el-menu-item v-else :index="item.navUrl" :key="item.navId">
+                {{ item.navTitle }}
+              </el-menu-item>
+            </template>
+
+
+
+          </el-menu>
+
+
+
+
+      </el-col>
+    </el-row>
+  </el-footer>
+  </el-container>
+
+</div>
+</template>
+
+<script>
+import {navList} from "../static/js/index"
+export default {
+  name: "HeadBar",
+  data(){
+    return{
+      nav_list:null,
+
+      searchValue:null
+    }
+  },created() {
+    this.nav_list=this.getNavList();
+  },methods: {
+    to_search(){
+      this.$router.push(
+      { name: 'searchInfo-id', params: { key: this.searchValue }}
+      )
+    },
+    getNavList(){
+      navList().then(response=>{
+        this.nav_list=response.rows;
+
+
+
+
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+body{
+  margin: 0;
+}
+
+html,body{
+  padding: 0;
+  margin: 0;
+}
+
+</style>
+<style>
+a{
+  text-decoration:none;
+  color: black;
+}
+a:visited{text-decoration:none;}
+
+</style>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 28 - 0
components/LTInfo.vue


+ 46 - 0
components/LTProgress.vue

@@ -0,0 +1,46 @@
+<template>
+<el-container>
+  <el-main style="padding: 0">
+    <el-row style="padding: 50px">
+      <el-col :span="18" offset="3">
+        <el-steps :active="0">
+          <el-step title="步骤1" description="阅读入会指南、规章制度" icon="el-icon-tickets"></el-step>
+          <el-step title="步骤2" description="填写入会申请表" icon="el-icon-edit"></el-step>
+          <el-step title="步骤3" description="邮寄或者官网申请" icon="el-icon-message"></el-step>
+          <el-step title="步骤4" description="批准入会" icon="el-icon-folder-checked"></el-step>
+          <el-step title="步骤5" description="缴纳会费" icon="el-icon-bank-card"></el-step>
+          <el-step title="步骤6" description="发放证书" icon="el-icon-medal"></el-step>
+        </el-steps>
+      </el-col>
+    </el-row>
+
+  </el-main>
+</el-container>
+
+
+</template>
+
+<script >
+export default {
+  name: "LTProgress"
+}
+</script>
+
+<style scoped>
+.el-step__title .is-finish{
+  color: #b11116;
+}
+html,body{
+  padding: 0;
+  margin: 0;
+}
+
+
+
+
+
+
+</style>
+<style>
+
+</style>

+ 19 - 0
components/NuxtLogo.vue

@@ -0,0 +1,19 @@
+<template>
+  <svg
+    class="nuxt-logo"
+    viewBox="0 0 45 30"
+    fill="none"
+    xmlns="http://www.w3.org/2000/svg"
+  >
+    <path
+      d="M24.7203 29.704H41.1008C41.6211 29.7041 42.1322 29.5669 42.5828 29.3061C43.0334 29.0454 43.4075 28.6704 43.6675 28.2188C43.9275 27.7672 44.0643 27.2549 44.0641 26.7335C44.0639 26.2121 43.9266 25.6999 43.6662 25.2485L32.6655 6.15312C32.4055 5.70162 32.0315 5.32667 31.581 5.06598C31.1305 4.8053 30.6195 4.66805 30.0994 4.66805C29.5792 4.66805 29.0682 4.8053 28.6177 5.06598C28.1672 5.32667 27.7932 5.70162 27.5332 6.15312L24.7203 11.039L19.2208 1.48485C18.9606 1.03338 18.5864 0.658493 18.1358 0.397853C17.6852 0.137213 17.1741 0 16.6538 0C16.1336 0 15.6225 0.137213 15.1719 0.397853C14.7213 0.658493 14.3471 1.03338 14.0868 1.48485L0.397874 25.2485C0.137452 25.6999 0.000226653 26.2121 2.8053e-07 26.7335C-0.000226092 27.2549 0.136554 27.7672 0.396584 28.2188C0.656614 28.6704 1.03072 29.0454 1.48129 29.3061C1.93185 29.5669 2.44298 29.7041 2.96326 29.704H13.2456C17.3195 29.704 20.3239 27.9106 22.3912 24.4118L27.4102 15.7008L30.0986 11.039L38.1667 25.0422H27.4102L24.7203 29.704ZM13.0779 25.0374L5.9022 25.0358L16.6586 6.36589L22.0257 15.7008L18.4322 21.9401C17.0593 24.2103 15.4996 25.0374 13.0779 25.0374Z"
+      fill="#00DC82"
+    />
+  </svg>
+</template>
+
+<style>
+.nuxt-logo {
+  height: 180px;
+}
+</style>

+ 101 - 0
components/Pagination/index.vue

@@ -0,0 +1,101 @@
+<template>
+  <div :class="{'hidden':hidden}" class="pagination-container">
+    <el-pagination
+      :background="background"
+      :current-page.sync="currentPage"
+      :page-size.sync="pageSize"
+      :layout="layout"
+      :page-sizes="pageSizes"
+      :total="total"
+      v-bind="$attrs"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import { scrollTo } from '../../static/util/scroll-to'
+
+export default {
+  name: 'Pagination',
+  props: {
+    total: {
+      required: true,
+      type: Number
+    },
+    page: {
+      type: Number,
+      default: 1
+    },
+    limit: {
+      type: Number,
+      default: 20
+    },
+    pageSizes: {
+      type: Array,
+      default() {
+        return [10, 20, 30, 50]
+      }
+    },
+    layout: {
+      type: String,
+      default: 'total, sizes, prev, pager, next, jumper'
+    },
+    background: {
+      type: Boolean,
+      default: true
+    },
+    autoScroll: {
+      type: Boolean,
+      default: true
+    },
+    hidden: {
+      type: Boolean,
+      default: false
+    }
+  },
+  computed: {
+    currentPage: {
+      get() {
+        return this.page
+      },
+      set(val) {
+        this.$emit('update:page', val)
+      }
+    },
+    pageSize: {
+      get() {
+        return this.limit
+      },
+      set(val) {
+        this.$emit('update:limit', val)
+      }
+    }
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.$emit('pagination', { page: this.currentPage, limit: val })
+      if (this.autoScroll) {
+        scrollTo(0, 800)
+      }
+    },
+    handleCurrentChange(val) {
+      this.$emit('pagination', { page: val, limit: this.pageSize })
+      if (this.autoScroll) {
+        scrollTo(0, 800)
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.pagination-container {
+  background: #fff;
+  padding: 32px 16px;
+}
+.pagination-container.hidden {
+  display: none;
+}
+</style>

+ 367 - 0
components/SearchList.vue

@@ -0,0 +1,367 @@
+<template>
+<div>
+  <el-container>
+    <el-main style="padding: 0">
+
+<!--      导航头部-->
+      <!--          主题导航-->
+      <el-row  >
+
+        <el-col :span="18" offset="3">
+          <el-row class="nav_tap" :gutter="34" style="padding: 10px;margin-left: 0;margin-right:0;margin-top: 25px " >
+            <p v-show="search_key!=null&&search_key!=''" style="text-align: left">以下是关键词: <span v-html="search_key" class="nav_title"></span> 的检索内容:</p>
+
+            <el-col :span="18" style="margin-bottom: 15px">
+              <span class="nav_title">按关键词:</span>
+              <el-input
+                type="textarea"
+                :autosize="{ minRows: 1, maxRows: 2}"
+                placeholder="请输入内容"
+                v-model="s_key">
+              </el-input>
+            </el-col>
+            <el-col :span="8" ><span class="nav_title">按照类型:</span>
+
+              <el-select v-model="s_type" clearable placeholder="请选择">
+                <el-option
+                  v-for="item in wordType"
+                  :key="item.dictCode"
+                  :label="item.dictLabel"
+                  :value="item.dictValue">
+                </el-option>
+              </el-select>
+            </el-col>
+            <el-col :span="11">
+
+
+              <div class="block">
+                <span class="nav_title">按照时段:</span>
+                <el-date-picker
+                  v-model="timer_picker"
+                  type="daterange"
+                  align="right"
+                  unlink-panels
+                  format="yyyy-MM-dd"
+                  value-format="yyyy-MM-dd"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期"
+                  :picker-options="pickerOptions">
+                </el-date-picker>
+              </div>
+            </el-col>
+            <el-col :span="5"><span @click="getSearchList()" class="nav_title">&nbsp;&nbsp;&nbsp;搜索&nbsp;&nbsp;&nbsp;</span></el-col>
+
+
+          </el-row>
+
+        </el-col>
+
+      </el-row>
+
+          <!--        主要列表-->
+          <el-row>
+            <el-col :span="18" offset="3">
+              <el-row>
+                <el-col v-for="item in news_list" :key="item"  >
+                  <el-row class="word_item" style="margin-bottom: 20px">
+                    <el-col :span="8">
+                      <div>
+
+                           <span class="type_flag" v-for="type in wordType" v-if="type.dictValue==item.newsInfoType">
+                      {{type.dictLabel}}
+                    </span>
+
+                      </div>
+                      <el-image
+                        style="width: 100%; height: 300px"
+                        lazy
+                        v-if="item.newsInfoUrl "
+                        :src="item.newsInfoUrl "
+                      ></el-image>
+                    </el-col>
+                    <el-col class="word_info" :span="16">
+                      <div >
+                        <h4>
+                          <nuxt-link :to="{name:'info-id',params:{id:item.newsInfoId,title:item.newsInfoTitle}}">
+                            {{item.newsInfoTitle.length>25?item.newsInfoTitle.substr(1,25)+"...":item.newsInfoTitle}}
+                          </nuxt-link>
+                          <!--                          <n-link style="text-decoration: none; font-size: 1.3rem;font-weight: 400;color: black"  :to="{name:'info-id'}">  {{item.newsInfoTitle}}</n-link>-->
+                        </h4>
+                        <div v-html="item.newsInfoContent.replace(/<[^>]+>/g,'').length>100?item.newsInfoContent.replace(/<[^>]+>/g,'').substr(1,
+                    100)+'...':item.newsInfoContent.replace(/<[^>]+>/g,'')">
+
+                        </div>
+                        <span class="info_span"><i class="el-icon-s-custom"></i>{{item.newsInfoAuthor}}    时间:{{item.newsInfoTime}}</span>
+                      </div>
+                      <div></div>
+                    </el-col>
+                  </el-row>
+
+                </el-col>
+              </el-row>
+            </el-col>
+
+          </el-row>
+
+          <!--        分页-->
+          <el-row>
+            <el-col :span="18" offset="3">
+              <el-row>
+                <el-col :span="18" offset="7">
+                  <pagination
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.pageNum"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getSearchList"
+                  />
+
+                </el-col>
+              </el-row>
+            </el-col>
+          </el-row>
+
+
+
+    </el-main>
+  </el-container>
+</div>
+</template>
+
+<script>
+import {navList,newsList,dictList,listWordPost} from "../static/js/index"
+import axios  from "axios";
+export default {
+  name: "SearchList",
+  head(){
+    return{
+      title:"中关村公共资源论坛|文章检索"
+    }
+  },
+
+  data(){
+    return{
+
+      pickerOptions: {
+        shortcuts: [{
+          text: '最近一周',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '最近一个月',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '最近三个月',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      value1: '',
+      value2: '',
+      search_key:null,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        type: null,
+        author: null,
+        releaseTime: null,
+        word: null,
+        coverUrl: null
+      },
+      news_list:null,
+      total:0,
+      wordType:null,
+      timer_picker:[],
+      s_type:null,
+      s_key:null
+    }
+  },
+  created() {
+    this.getSearchList()
+    this.getDictType()
+  },
+  methods:{
+    getDictType(){
+      dictList({"dictType":"sys_info_word_type"}).then(response=>{
+        this.wordType=response.rows;
+      })
+    },
+    s_click(){
+      console.log(this.timer_picker)
+
+      // axios({
+      //   method: 'post',
+      //   url: 'http://localhost:7070/website/news/listPost',
+      //   data: {
+      //     newsInfoTitle: this.s_key,
+      //     pageNum: 1,
+      //     newsInfoType: this.s_type,
+      //     'params[beginNewsInfoTime]': this.timer_picker[0],
+      //     'params[endNewsInfoTime]': this.timer_picker[1],
+      //     pageSize: 5,
+      //
+      //   },
+      //   headers: {
+      //     'Content-Type': 'application/x-www-form-urlencoded'
+      //   }
+      // }).then(response=>{
+      //   this.queryParams.pageNum=1
+      //   this.news_list=response.rows;
+      //   this.total=response.total;
+      // })
+
+
+
+      listWordPost({"newsInfoTitle": this.s_key,"pageNum":1,"newsInfoType":this.s_type,
+        "beginNewsInfoTime":this.timer_picker[0],
+        "endNewsInfoTime":this.timer_picker[1],
+        "pageSize":this.queryParams.pageSize}).then(response=>{
+        this.queryParams.pageNum=1
+        this.news_list=response.rows;
+        this.total=response.total;
+
+      })
+    },
+    getSearchList(){
+
+
+      if(this.timer_picker.length>0){
+        listWordPost({"newsInfoTitle": this.s_key,"pageNum":this.queryParams.pageNum,"newsInfoType":this.s_type,
+          "beginNewsInfoTime":this.timer_picker[0],
+          "endNewsInfoTime":this.timer_picker[1],
+          "pageSize":this.queryParams.pageSize}).then(response=>{
+
+          this.news_list=response.rows;
+          this.total=response.total;
+          this.search_key=this.s_key;
+        })
+      }else {
+        newsList({"newsInfoTitle": this.s_key,"pageNum":this.queryParams.pageNum,"newsInfoType":this.s_type,
+          // "beginNewsInfoTime":this.timer_picker[0],
+          // "endNewsInfoTime":this.timer_picker[1],
+          "pageSize":this.queryParams.pageSize}).then(response=>{
+
+          this.news_list=response.rows;
+          this.total=response.total;
+          this.search_key=this.s_key;
+        })
+      }
+      if (this.$route.params.key!=null){
+        this.search_key=this.$route.params.key;
+        this.$route.params.key=null;
+      }
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+
+
+.nav_tap{
+  background-color: #f0f0f0;
+  text-align: left;
+  margin-bottom: 30px;
+}
+
+.nav_tap span{
+  background-color: #b11116;
+
+
+  -webkit-text-size-adjust: 100%;
+  letter-spacing: 1px;
+  text-rendering: optimizeLegibility;
+  font-family: "PingFang SC", "Microsoft YaHei", "STHeiti", "sans-serif";
+  line-height: 38px;
+  font-size: 22px;
+  box-sizing: border-box;
+  background-size: contain;
+  background-position: center;
+  background-repeat: no-repeat;
+
+  vertical-align: middle;
+  text-align: center;
+  cursor: pointer;
+  border-radius: 6px;
+  padding: 0 20px;
+
+  color: white;
+}
+.type_flag{
+  position: absolute;
+  z-index: 2;
+  padding: 7px;
+  margin: 10px;
+  color: white;
+  background-color: rgba(0,0,0,0.5);
+  border-radius: 20px;
+}
+.word_item{
+  background-color: #f0f0f0;
+}
+.word_info{
+  padding: 0 20px;
+}
+.info_span{
+  position: absolute;
+  bottom: 10px;
+
+}
+
+
+
+</style>
+<style>
+
+/*带背景的分页按钮背景色begin*/
+.el-pagination.is-background .el-pager li:not(.disabled).active {
+  background-color: #b11116;
+  color: #FFF;
+}
+.el-pagination.is-background .el-pager li.active {
+  color: #fff;
+  cursor: default;
+}
+.el-pagination.is-background .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled).active:hover {
+  background-color: #b11116;
+  color: #FFF;
+}
+/*带背景的分页按钮背景色end*/
+
+
+/*不带背景的分页按钮背景色begin*/
+.el-pager li.active {
+  color: #b11116;
+  cursor: default;
+}
+.el-pagination .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+/*不带背景的分页按钮背景色end*/
+</style>

+ 122 - 0
components/Tutorial.vue

@@ -0,0 +1,122 @@
+<!-- Please remove this file from your project -->
+<template>
+  <div
+    class="relative flex items-top justify-center min-h-screen bg-gray-100 sm:items-center sm:pt-0"
+  >
+    <link
+      href="https://cdn.jsdelivr.net/npm/tailwindcss@2.1.2/dist/tailwind.min.css"
+      rel="stylesheet"
+    />
+    <div class="max-w-4xl mx-auto sm:px-6 lg:px-8">
+      <a
+        class="flex justify-center pt-8 sm:pt-0"
+        href="https://nuxtjs.org"
+        target="_blank"
+      >
+        <svg
+          width="218"
+          height="45"
+          viewBox="0 0 159 30"
+          fill="none"
+          xmlns="http://www.w3.org/2000/svg"
+        >
+          <path
+            d="M55.5017 6.81866H60.1727L70.0719 22.9912V6.81866H74.3837V29.7345H69.7446L59.8135 13.5955V29.7345H55.5017V6.81866Z"
+            fill="#003543"
+          />
+          <path
+            d="M93.657 29.7344H89.6389V27.1747C88.7241 28.9761 86.8628 29.9904 84.5113 29.9904C80.7869 29.9904 78.3684 27.3059 78.3684 23.4423V13.2339H82.3865V22.5976C82.3865 24.8566 83.7594 26.4276 85.8171 26.4276C88.0712 26.4276 89.6389 24.6598 89.6389 22.2377V13.2339H93.657V29.7344Z"
+            fill="#003543"
+          />
+          <path
+            d="M107.64 29.7344L103.784 24.2342L99.9291 29.7344H95.6492L101.596 21.1242L96.1074 13.2339H100.485L103.784 17.9821L107.051 13.2339H111.461L105.94 21.1242L111.886 29.7344H107.64Z"
+            fill="#003543"
+          />
+          <path
+            d="M120.053 8.25848V13.2339H124.627V16.6063H120.053V24.7974C120.053 25.0725 120.162 25.3363 120.356 25.531C120.55 25.7257 120.813 25.8353 121.087 25.8357H124.627V29.728H121.98C118.386 29.728 116.035 27.6323 116.035 23.9687V16.6095H112.801V13.2339H114.83C115.776 13.2339 116.327 12.6692 116.327 11.7349V8.25848H120.053Z"
+            fill="#003543"
+          />
+          <path
+            d="M134.756 24.5446V6.81866H139.066V23.1864C139.066 27.6067 136.943 29.7345 133.349 29.7345H128.332V25.8421H133.461C133.804 25.8421 134.134 25.7054 134.377 25.4621C134.619 25.2188 134.756 24.8888 134.756 24.5446Z"
+            fill="#003543"
+          />
+          <path
+            d="M141.649 22.0409H145.799C146.029 24.6006 147.728 26.2308 150.472 26.2308C152.923 26.2308 154.623 25.2501 154.623 23.2199C154.623 18.3085 142.331 21.7129 142.331 12.9395C142.334 9.17515 145.568 6.55945 150.215 6.55945C155.05 6.55945 158.317 9.34153 158.516 13.6306H154.388C154.193 11.6341 152.632 10.2918 150.207 10.2918C147.953 10.2918 146.548 11.3397 146.548 12.9427C146.548 18.0173 159 14.2226 159 23.1576C159 27.4131 155.504 30 150.474 30C145.279 30 141.882 26.8563 141.654 22.0441"
+            fill="#003543"
+          />
+          <path
+            d="M24.7203 29.704H41.1008C41.6211 29.7041 42.1322 29.5669 42.5828 29.3061C43.0334 29.0454 43.4075 28.6704 43.6675 28.2188C43.9275 27.7672 44.0643 27.2549 44.0641 26.7335C44.0639 26.2121 43.9266 25.6999 43.6662 25.2485L32.6655 6.15312C32.4055 5.70162 32.0315 5.32667 31.581 5.06598C31.1305 4.8053 30.6195 4.66805 30.0994 4.66805C29.5792 4.66805 29.0682 4.8053 28.6177 5.06598C28.1672 5.32667 27.7932 5.70162 27.5332 6.15312L24.7203 11.039L19.2208 1.48485C18.9606 1.03338 18.5864 0.658493 18.1358 0.397853C17.6852 0.137213 17.1741 0 16.6538 0C16.1336 0 15.6225 0.137213 15.1719 0.397853C14.7213 0.658493 14.3471 1.03338 14.0868 1.48485L0.397874 25.2485C0.137452 25.6999 0.000226653 26.2121 2.8053e-07 26.7335C-0.000226092 27.2549 0.136554 27.7672 0.396584 28.2188C0.656614 28.6704 1.03072 29.0454 1.48129 29.3061C1.93185 29.5669 2.44298 29.7041 2.96326 29.704H13.2456C17.3195 29.704 20.3239 27.9106 22.3912 24.4118L27.4102 15.7008L30.0986 11.039L38.1667 25.0422H27.4102L24.7203 29.704ZM13.0779 25.0374L5.9022 25.0358L16.6586 6.36589L22.0257 15.7008L18.4322 21.9401C17.0593 24.2103 15.4996 25.0374 13.0779 25.0374Z"
+            fill="#00DC82"
+          />
+        </svg>
+      </a>
+      <div class="mt-8 bg-white overflow-hidden shadow sm:rounded-lg p-6">
+        <h2 class="text-2xl leading-7 font-semibold">
+          Welcome to your Nuxt Application
+        </h2>
+        <p class="mt-3 text-gray-600">
+          We recommend you take a look at the
+          <a
+            href="https://nuxtjs.org"
+            target="_blank"
+            class="button--doc text-green-500 hover:underline"
+            >Nuxt documentation</a
+          >, whether you are new or have previous experience with the
+          framework.<br />
+        </p>
+        <p class="mt-4 pt-4 text-gray-800 border-t border-dashed">
+          To get started, remove
+          <code class="bg-gray-100 text-sm p-1 rounded border"
+            >components/Tutorial.vue</code
+          >
+          and start coding in
+          <code class="bg-gray-100 text-sm p-1 rounded border"
+            >pages/index.vue</code
+          >. Have fun!
+        </p>
+      </div>
+      <div class="flex justify-center pt-4 space-x-2">
+        <a href="https://github.com/nuxt/nuxt.js" target="_blank"
+          ><svg
+            class="w-6 h-6 text-gray-600 hover:text-gray-800 button--github"
+            xmlns="http://www.w3.org/2000/svg"
+            xmlns:xlink="http://www.w3.org/1999/xlink"
+            aria-hidden="true"
+            role="img"
+            width="32"
+            height="32"
+            preserveAspectRatio="xMidYMid meet"
+            viewBox="0 0 24 24"
+          >
+            <path
+              d="M12 2.247a10 10 0 0 0-3.162 19.487c.5.088.687-.212.687-.475c0-.237-.012-1.025-.012-1.862c-2.513.462-3.163-.613-3.363-1.175a3.636 3.636 0 0 0-1.025-1.413c-.35-.187-.85-.65-.013-.662a2.001 2.001 0 0 1 1.538 1.025a2.137 2.137 0 0 0 2.912.825a2.104 2.104 0 0 1 .638-1.338c-2.225-.25-4.55-1.112-4.55-4.937a3.892 3.892 0 0 1 1.025-2.688a3.594 3.594 0 0 1 .1-2.65s.837-.262 2.75 1.025a9.427 9.427 0 0 1 5 0c1.912-1.3 2.75-1.025 2.75-1.025a3.593 3.593 0 0 1 .1 2.65a3.869 3.869 0 0 1 1.025 2.688c0 3.837-2.338 4.687-4.563 4.937a2.368 2.368 0 0 1 .675 1.85c0 1.338-.012 2.413-.012 2.75c0 .263.187.575.687.475A10.005 10.005 0 0 0 12 2.247z"
+              fill="currentColor"
+            /></svg
+        ></a>
+        <a href="https://twitter.com/nuxt_js" target="_blank"
+          ><svg
+            class="w-6 h-6 text-gray-600 hover:text-gray-800"
+            xmlns="http://www.w3.org/2000/svg"
+            xmlns:xlink="http://www.w3.org/1999/xlink"
+            aria-hidden="true"
+            role="img"
+            width="32"
+            height="32"
+            preserveAspectRatio="xMidYMid meet"
+            viewBox="0 0 24 24"
+          >
+            <path
+              d="M22.46 6c-.77.35-1.6.58-2.46.69c.88-.53 1.56-1.37 1.88-2.38c-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29c0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15c0 1.49.75 2.81 1.91 3.56c-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07a4.28 4.28 0 0 0 4 2.98a8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21C16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56c.84-.6 1.56-1.36 2.14-2.23z"
+              fill="currentColor"
+            /></svg
+        ></a>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'NuxtTutorial',
+}
+</script>

+ 225 - 0
components/WordEditor.vue

@@ -0,0 +1,225 @@
+<template>
+<div>
+  <el-container>
+    <el-main style="padding: 0;margin-top: 20px">
+
+
+      <!--        主要列表-->
+      <el-row>
+        <el-col :span="18" offset="3">
+          <el-row>
+            <el-col v-for="item in news_list" :key="item"  >
+              <el-row class="word_item" style="margin-bottom: 20px">
+                <el-col :span="8">
+                  <div>
+
+                           <span class="type_flag" v-for="type in wordType" v-if="type.dictValue==item.newsInfoType">
+                      {{type.dictLabel}}
+                    </span>
+
+                  </div>
+                  <el-image
+                    style="width: 100%; height: 300px"
+                    lazy
+                    v-if="item.newsInfoUrl "
+                    :src="item.newsInfoUrl "
+                  ></el-image>
+                </el-col>
+                <el-col class="word_info" :span="16">
+                  <div >
+                    <h4>
+                      <nuxt-link :to="{name:'info-id',params:{id:item.newsInfoId,title:item.newsInfoTitle}}">
+                        {{item.newsInfoTitle.length>25?item.newsInfoTitle.substr(1,25)+"...":item.newsInfoTitle}}
+                      </nuxt-link>
+                      <!--                          <n-link style="text-decoration: none; font-size: 1.3rem;font-weight: 400;color: black"  :to="{name:'info-id'}">  {{item.newsInfoTitle}}</n-link>-->
+                    </h4>
+                    <div v-html="item.newsInfoContent.replace(/<[^>]+>/g,'').length>100?item.newsInfoContent.replace(/<[^>]+>/g,'').substr(1,
+                    100)+'...':item.newsInfoContent.replace(/<[^>]+>/g,'')">
+
+                    </div>
+                    <span class="info_span"><i class="el-icon-s-custom"></i>{{item.newsInfoAuthor}}    时间:{{item.newsInfoTime}}</span>
+                  </div>
+                  <div></div>
+                </el-col>
+              </el-row>
+
+            </el-col>
+          </el-row>
+        </el-col>
+
+      </el-row>
+
+      <!--        分页-->
+      <el-row>
+        <el-col :span="18" offset="3">
+          <el-row>
+            <el-col :span="18" offset="7">
+              <pagination
+                v-show="total>0"
+                :total="total"
+                :page.sync="queryParams.pageNum"
+                :limit.sync="queryParams.pageSize"
+                @pagination="getSearchList"
+              />
+
+            </el-col>
+          </el-row>
+        </el-col>
+      </el-row>
+
+    </el-main>
+  </el-container>
+</div>
+</template>
+
+<script>
+import {dictList, newsList} from "../static/js";
+
+export default {
+  name: "WordEditor",
+  head(){
+    return{
+      title:"中关村公共资源论坛|"+  this.type_name
+    }
+  },
+  data(){
+    return{
+      check_type:1,
+      type_name:"编辑精选",
+      value1: '',
+      value2: '',
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        type: null,
+        author: null,
+        releaseTime: null,
+        word: null,
+        coverUrl: null
+      },
+      news_list:null,
+      total:0,
+      wordType:null,
+      timer_picker:null,
+      s_type:null,
+      s_key:null
+    }
+  },
+  created() {
+    this.getSearchList()
+    this.getDictType()
+  },
+  methods:{
+    getDictType(){
+      dictList({"dictType":"sys_info_word_type"}).then(response=>{
+        this.wordType=response.rows;
+      })
+    },
+    getSearchList(){
+
+      newsList({"newsInfoRecommend": 1,"pageNum":this.queryParams.pageNum,"pageSize":this.queryParams.pageSize}).then(response=>{
+        this.news_list=response.rows;
+        this.total=response.total;
+
+      })
+
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+.nav_tap{
+  background-color: #f0f0f0;
+  text-align: center;
+  margin-bottom: 30px;
+}
+
+.nav_tap span{
+  background-color: #b11116;
+
+
+  -webkit-text-size-adjust: 100%;
+  letter-spacing: 1px;
+  text-rendering: optimizeLegibility;
+  font-family: "PingFang SC", "Microsoft YaHei", "STHeiti", "sans-serif";
+  line-height: 38px;
+  font-size: 22px;
+  box-sizing: border-box;
+  background-size: contain;
+  background-position: center;
+  background-repeat: no-repeat;
+
+  vertical-align: middle;
+  text-align: center;
+  cursor: pointer;
+  border-radius: 6px;
+  padding: 0 20px;
+
+  color: white;
+}
+
+
+.type_flag{
+  position: absolute;
+  z-index: 2;
+  padding: 7px;
+  margin: 10px;
+  color: white;
+  background-color: rgba(0,0,0,0.5);
+  border-radius: 20px;
+}
+.word_item{
+  background-color: #f0f0f0;
+}
+.word_info{
+  padding: 0 20px;
+}
+.info_span{
+  position: absolute;
+  bottom: 10px;
+
+}
+
+
+
+</style>
+<style>
+
+/*带背景的分页按钮背景色begin*/
+.el-pagination.is-background .el-pager li:not(.disabled).active {
+  background-color: #b11116;
+  color: #FFF;
+}
+.el-pagination.is-background .el-pager li.active {
+  color: #fff;
+  cursor: default;
+}
+.el-pagination.is-background .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled).active:hover {
+  background-color: #b11116;
+  color: #FFF;
+}
+/*带背景的分页按钮背景色end*/
+
+
+/*不带背景的分页按钮背景色begin*/
+.el-pager li.active {
+  color: #b11116;
+  cursor: default;
+}
+.el-pagination .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+/*不带背景的分页按钮背景色end*/
+</style>

+ 57 - 0
components/WordInfo.vue

@@ -0,0 +1,57 @@
+<template>
+<div>
+  <el-container>
+    <el-main style="padding: 0px">
+      <el-row>
+        <el-col :span="18" offset="3">
+          <el-row>
+
+          </el-row>
+        </el-col>
+      </el-row>
+    </el-main>
+  </el-container>
+</div>
+</template>
+
+<script>
+import {navList,newsList,dictList} from "../static/js/index"
+export default {
+  name: "WordInfo",
+  head(){
+    return{
+      title:"中关村公共资源论坛"
+    }
+  },
+  data(){
+    return{
+      newsTitle:this.$route.params.title,
+      news_info:{
+        newsInfoTitle:null,
+        newsInfoAuthor:null,
+        newsInfoTime:null,
+        newsInfoContent:null
+      }
+    }
+  },
+  created() {
+    this.getNewsInfo()
+    // this.news_info.id=this.$route.params.id;
+    // this.news_info.title=this.$route.params.title;
+  },
+  methods:{
+      getNewsInfo(){
+
+        newsList({"newsInfoId":this.$route.params.id}).then(response=>{
+          this.news_info=response.rows[0];
+          this.newsTitle=this.news_info.newsInfoTitle
+
+        })
+      }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 228 - 0
components/WordList.vue

@@ -0,0 +1,228 @@
+<template>
+<div>
+
+  <el-container>
+    <el-main style="padding: 0;margin-top: 20px">
+
+
+      <!--        主要列表-->
+      <el-row>
+        <el-col :span="18" offset="3">
+          <el-row>
+            <el-col v-for="item in news_list" :key="item"  >
+              <el-row class="word_item" style="margin-bottom: 20px">
+                <el-col :span="8">
+                  <div>
+
+                           <span class="type_flag" v-for="type in wordType" v-if="type.dictValue==item.newsInfoType">
+                      {{type.dictLabel}}
+                    </span>
+
+                  </div>
+                  <el-image
+                    style="width: 100%; height: 300px"
+                    lazy
+                    v-if="item.newsInfoUrl "
+                    :src="item.newsInfoUrl "
+                  ></el-image>
+                </el-col>
+                <el-col class="word_info" :span="16">
+                  <div >
+                    <h4>
+                      <nuxt-link :to="{name:'info-id',params:{id:item.newsInfoId,title:item.newsInfoTitle}}">
+                        {{item.newsInfoTitle.length>25?item.newsInfoTitle.substr(1,25)+"...":item.newsInfoTitle}}
+                      </nuxt-link>
+                      <!--                          <n-link style="text-decoration: none; font-size: 1.3rem;font-weight: 400;color: black"  :to="{name:'info-id'}">  {{item.newsInfoTitle}}</n-link>-->
+                    </h4>
+                    <div v-html="item.newsInfoContent.replace(/<[^>]+>/g,'').length>100?item.newsInfoContent.replace(/<[^>]+>/g,'').substr(1,
+                    100)+'...':item.newsInfoContent.replace(/<[^>]+>/g,'')">
+
+                    </div>
+                    <span class="info_span"><i class="el-icon-s-custom"></i>{{item.newsInfoAuthor}}    时间:{{item.newsInfoTime}}</span>
+                  </div>
+                  <div></div>
+                </el-col>
+              </el-row>
+
+            </el-col>
+          </el-row>
+        </el-col>
+
+      </el-row>
+
+      <!--        分页-->
+      <el-row>
+        <el-col :span="18" offset="3">
+          <el-row>
+            <el-col :span="18" offset="7">
+              <pagination
+                v-show="total>0"
+                :total="total"
+                :page.sync="queryParams.pageNum"
+                :limit.sync="queryParams.pageSize"
+                @pagination="getSearchList"
+              />
+
+            </el-col>
+          </el-row>
+        </el-col>
+      </el-row>
+
+    </el-main>
+  </el-container>
+
+</div>
+</template>
+
+<script>
+import {dictList, listWordPost, newsList} from "../static/js";
+
+export default {
+  name: "WordList",
+  head(){
+    return{
+      title:"中关村公共资源论坛|"+  this.type_name
+    }
+  },
+  data(){
+    return{
+      check_type:1,
+      type_name:"经典案例",
+      value1: '',
+      value2: '',
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        type: null,
+        author: null,
+        releaseTime: null,
+        word: null,
+        coverUrl: null
+      },
+      news_list:null,
+      total:0,
+      wordType:null,
+      timer_picker:null,
+      s_type:null,
+      s_key:null
+    }
+  },
+  created() {
+    this.getSearchList()
+    this.getDictType()
+  },
+  methods:{
+    getDictType(){
+      dictList({"dictType":"sys_info_word_type"}).then(response=>{
+        this.wordType=response.rows;
+      })
+    },
+    getSearchList(){
+
+      newsList({"newsInfoType": 5,"pageNum":this.queryParams.pageNum,"pageSize":this.queryParams.pageSize}).then(response=>{
+        this.news_list=response.rows;
+        this.total=response.total;
+
+      })
+
+
+    }
+  }
+}
+</script>
+
+
+<style scoped>
+.nav_tap{
+  background-color: #f0f0f0;
+  text-align: center;
+  margin-bottom: 30px;
+}
+
+.nav_tap span{
+  background-color: #b11116;
+
+
+  -webkit-text-size-adjust: 100%;
+  letter-spacing: 1px;
+  text-rendering: optimizeLegibility;
+  font-family: "PingFang SC", "Microsoft YaHei", "STHeiti", "sans-serif";
+  line-height: 38px;
+  font-size: 22px;
+  box-sizing: border-box;
+  background-size: contain;
+  background-position: center;
+  background-repeat: no-repeat;
+
+  vertical-align: middle;
+  text-align: center;
+  cursor: pointer;
+  border-radius: 6px;
+  padding: 0 20px;
+
+  color: white;
+}
+
+
+.type_flag{
+  position: absolute;
+  z-index: 2;
+  padding: 7px;
+  margin: 10px;
+  color: white;
+  background-color: rgba(0,0,0,0.5);
+  border-radius: 20px;
+}
+.word_item{
+  background-color: #f0f0f0;
+}
+.word_info{
+  padding: 0 20px;
+}
+.info_span{
+  position: absolute;
+  bottom: 10px;
+
+}
+
+
+
+</style>
+<style>
+
+/*带背景的分页按钮背景色begin*/
+.el-pagination.is-background .el-pager li:not(.disabled).active {
+  background-color: #b11116;
+  color: #FFF;
+}
+.el-pagination.is-background .el-pager li.active {
+  color: #fff;
+  cursor: default;
+}
+.el-pagination.is-background .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled).active:hover {
+  background-color: #b11116;
+  color: #FFF;
+}
+/*带背景的分页按钮背景色end*/
+
+
+/*不带背景的分页按钮背景色begin*/
+.el-pager li.active {
+  color: #b11116;
+  cursor: default;
+}
+.el-pagination .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+/*不带背景的分页按钮背景色end*/
+</style>

+ 262 - 0
components/WordType.vue

@@ -0,0 +1,262 @@
+<template>
+  <div>
+    <el-container>
+      <el-main style="padding: 0">
+        <!--          主题导航-->
+        <el-row  >
+
+          <el-col :span="18" offset="3">
+            <el-row class="nav_tap" :gutter="20" style="padding: 10px;margin-left: 0;margin-right:0;margin-top: 25px " >
+              <el-col :span="6"><span class="nav_title" @click="changeType(1)">动态要闻</span></el-col>
+              <el-col :span="6"><span class="nav_title" @click="changeType(2)">数据发布</span></el-col>
+              <el-col :span="6"><span class="nav_title" @click="changeType(3)">产品服务</span></el-col>
+              <el-col :span="6"><span class="nav_title" @click="changeType(4)">研究成果</span></el-col>
+            </el-row>
+
+          </el-col>
+
+        </el-row>
+
+
+        <!--        主要列表-->
+        <el-row>
+          <el-col :span="18" offset="3">
+            <el-row>
+              <el-col v-for="item in news_list" :key="item"  >
+                <el-row class="word_item" style="margin-bottom: 20px">
+                  <el-col :span="8">
+                    <div>
+
+                           <span class="type_flag" v-for="type in wordType" v-if="type.dictValue==item.newsInfoType">
+                      {{type.dictLabel}}
+                    </span>
+
+                    </div>
+                    <el-image
+                      style="width: 100%; height: 300px"
+                      lazy
+                      v-if="item.newsInfoUrl "
+                      :src="item.newsInfoUrl "
+                    ></el-image>
+                  </el-col>
+                  <el-col class="word_info" :span="16">
+                    <div >
+                      <h4>
+                        <nuxt-link :to="{name:'info-id',params:{id:item.newsInfoId,title:item.newsInfoTitle}}">
+                          {{item.newsInfoTitle.length>25?item.newsInfoTitle.substr(1,25)+"...":item.newsInfoTitle}}
+                        </nuxt-link>
+                        <!--                          <n-link style="text-decoration: none; font-size: 1.3rem;font-weight: 400;color: black"  :to="{name:'info-id'}">  {{item.newsInfoTitle}}</n-link>-->
+                      </h4>
+                      <div v-html="item.newsInfoContent.replace(/<[^>]+>/g,'').length>100?item.newsInfoContent.replace(/<[^>]+>/g,'').substr(1,
+                    100)+'...':item.newsInfoContent.replace(/<[^>]+>/g,'')">
+
+                      </div>
+                      <span class="info_span"><i class="el-icon-s-custom"></i>{{item.newsInfoAuthor}}    时间:{{item.newsInfoTime}}</span>
+                    </div>
+                    <div></div>
+                  </el-col>
+                </el-row>
+
+              </el-col>
+            </el-row>
+          </el-col>
+
+        </el-row>
+
+        <!--        分页-->
+        <el-row>
+          <el-col :span="18" offset="3">
+            <el-row>
+              <el-col :span="18" offset="7">
+                <pagination
+                  v-show="total>0"
+                  :total="total"
+                  :page.sync="queryParams.pageNum"
+                  :limit.sync="queryParams.pageSize"
+                  @pagination="getSearchList"
+                />
+
+              </el-col>
+            </el-row>
+          </el-col>
+        </el-row>
+
+      </el-main>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import {navList,newsList,dictList,listWordPost} from "../static/js/index"
+export default {
+  name: "WordType",
+  head(){
+    return{
+      title:"中关村公共资源论坛|"+  this.type_name
+    }
+  },
+  data(){
+    return{
+      check_type:1,
+      type_name:"动态新闻",
+      value1: '',
+      value2: '',
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        type: null,
+        author: null,
+        releaseTime: null,
+        word: null,
+        coverUrl: null
+      },
+      news_list:null,
+      total:0,
+      wordType:null,
+      timer_picker:null,
+      s_type:null,
+      s_key:null
+    }
+  },
+  created() {
+    this.getSearchList()
+    this.getDictType()
+  },
+  methods:{
+    getDictType(){
+      dictList({"dictType":"sys_info_word_type"}).then(response=>{
+        this.wordType=response.rows;
+      })
+    },
+    s_click(){
+      console.log(this.timer_picker)
+
+      listWordPost({"newsInfoTitle": this.s_key,"pageNum":1,"newsInfoType":this.s_type,
+        "beginNewsInfoTime":this.timer_picker[0],
+        "endNewsInfoTime":this.timer_picker[1],
+        // "params":[
+        //   { },
+        //   {},
+        // ] ,
+
+        "pageSize":5}).then(response=>{
+        this.queryParams.pageNum=1
+        this.news_list=response.rows;
+        this.total=response.total;
+
+      })
+    },
+    changeType(changeId){
+      this.check_type=changeId;
+      this.queryParams.pageNum=1;
+      this.getSearchList();
+    },
+    getSearchList(){
+
+      newsList({"newsInfoType": this.check_type,"pageNum":this.queryParams.pageNum,"pageSize":this.queryParams.pageSize}).then(response=>{
+
+        this.news_list=response.rows;
+        this.total=response.total;
+
+      })
+    }
+  }
+}
+</script>
+
+
+<style scoped>
+.nav_tap{
+  background-color: #f0f0f0;
+  text-align: center;
+  margin-bottom: 30px;
+}
+
+.nav_tap span{
+  background-color: #b11116;
+
+
+  -webkit-text-size-adjust: 100%;
+  letter-spacing: 1px;
+  text-rendering: optimizeLegibility;
+  font-family: "PingFang SC", "Microsoft YaHei", "STHeiti", "sans-serif";
+  line-height: 38px;
+  font-size: 22px;
+  box-sizing: border-box;
+  background-size: contain;
+  background-position: center;
+  background-repeat: no-repeat;
+
+  vertical-align: middle;
+  text-align: center;
+  cursor: pointer;
+  border-radius: 6px;
+  padding: 0 20px;
+
+  color: white;
+}
+
+
+.type_flag{
+  position: absolute;
+  z-index: 2;
+  padding: 7px;
+  margin: 10px;
+  color: white;
+  background-color: rgba(0,0,0,0.5);
+  border-radius: 20px;
+}
+.word_item{
+  background-color: #f0f0f0;
+}
+.word_info{
+  padding: 0 20px;
+}
+.info_span{
+  position: absolute;
+  bottom: 10px;
+
+}
+
+
+
+</style>
+<style>
+
+/*带背景的分页按钮背景色begin*/
+.el-pagination.is-background .el-pager li:not(.disabled).active {
+  background-color: #b11116;
+  color: #FFF;
+}
+.el-pagination.is-background .el-pager li.active {
+  color: #fff;
+  cursor: default;
+}
+.el-pagination.is-background .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+.el-pagination.is-background .el-pager li:not(.disabled).active:hover {
+  background-color: #b11116;
+  color: #FFF;
+}
+/*带背景的分页按钮背景色end*/
+
+
+/*不带背景的分页按钮背景色begin*/
+.el-pager li.active {
+  color: #b11116;
+  cursor: default;
+}
+.el-pagination .el-pager li:hover {
+  color: #b11116;
+}
+.el-pagination .el-pager li:not(.disabled):hover {
+  color: #b11116;
+}
+/*不带背景的分页按钮背景色end*/
+</style>
+

+ 15 - 0
node_modules/.bin/JSONStream

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../JSONStream/bin.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../JSONStream/bin.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/JSONStream.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\JSONStream\bin.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/JSONStream.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../JSONStream/bin.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../JSONStream/bin.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/acorn

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../acorn/bin/acorn" "$@"
+  ret=$?
+else 
+  node  "$basedir/../acorn/bin/acorn" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/acorn.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\acorn\bin\acorn" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/acorn.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../acorn/bin/acorn" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../acorn/bin/acorn" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/ansi-html

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../ansi-html-community/bin/ansi-html" "$@"
+  ret=$?
+else 
+  node  "$basedir/../ansi-html-community/bin/ansi-html" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/ansi-html.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\ansi-html-community\bin\ansi-html" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/ansi-html.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../ansi-html-community/bin/ansi-html" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../ansi-html-community/bin/ansi-html" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/atob

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../atob/bin/atob.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../atob/bin/atob.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/atob.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\atob\bin\atob.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/atob.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../atob/bin/atob.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../atob/bin/atob.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/autoprefixer

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../autoprefixer/bin/autoprefixer" "$@"
+  ret=$?
+else 
+  node  "$basedir/../autoprefixer/bin/autoprefixer" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/autoprefixer.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\autoprefixer\bin\autoprefixer" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/autoprefixer.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../autoprefixer/bin/autoprefixer" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../autoprefixer/bin/autoprefixer" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/babylon

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../babylon/bin/babylon.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../babylon/bin/babylon.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/babylon.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\babylon\bin\babylon.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/babylon.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../babylon/bin/babylon.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../babylon/bin/babylon.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/browserslist

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../browserslist/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../browserslist/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/browserslist.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\browserslist\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/browserslist.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../browserslist/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../browserslist/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/commitlint

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../@commitlint/cli/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../@commitlint/cli/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/commitlint.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\@commitlint\cli\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/commitlint.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../@commitlint/cli/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../@commitlint/cli/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/conventional-commits-parser

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../conventional-commits-parser/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../conventional-commits-parser/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/conventional-commits-parser.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\conventional-commits-parser\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/conventional-commits-parser.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../conventional-commits-parser/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../conventional-commits-parser/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/cross-env

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../cross-env/src/bin/cross-env.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../cross-env/src/bin/cross-env.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 15 - 0
node_modules/.bin/cross-env-shell

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../cross-env/src/bin/cross-env-shell.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../cross-env/src/bin/cross-env-shell.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/cross-env-shell.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\cross-env\src\bin\cross-env-shell.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/cross-env-shell.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../cross-env/src/bin/cross-env-shell.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../cross-env/src/bin/cross-env-shell.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 17 - 0
node_modules/.bin/cross-env.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\cross-env\src\bin\cross-env.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/cross-env.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../cross-env/src/bin/cross-env.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../cross-env/src/bin/cross-env.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/css-beautify

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../js-beautify/js/bin/css-beautify.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../js-beautify/js/bin/css-beautify.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/css-beautify.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\js-beautify\js\bin\css-beautify.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/css-beautify.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../js-beautify/js/bin/css-beautify.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../js-beautify/js/bin/css-beautify.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/css-blank-pseudo

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../css-blank-pseudo/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../css-blank-pseudo/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/css-blank-pseudo.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\css-blank-pseudo\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/css-blank-pseudo.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../css-blank-pseudo/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../css-blank-pseudo/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/css-has-pseudo

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../css-has-pseudo/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../css-has-pseudo/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/css-has-pseudo.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\css-has-pseudo\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/css-has-pseudo.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../css-has-pseudo/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../css-has-pseudo/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/css-prefers-color-scheme

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../css-prefers-color-scheme/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../css-prefers-color-scheme/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/css-prefers-color-scheme.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\css-prefers-color-scheme\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/css-prefers-color-scheme.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../css-prefers-color-scheme/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../css-prefers-color-scheme/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/cssesc

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../cssesc/bin/cssesc" "$@"
+  ret=$?
+else 
+  node  "$basedir/../cssesc/bin/cssesc" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/cssesc.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\cssesc\bin\cssesc" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/cssesc.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../cssesc/bin/cssesc" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../cssesc/bin/cssesc" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/editorconfig

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../editorconfig/bin/editorconfig" "$@"
+  ret=$?
+else 
+  node  "$basedir/../editorconfig/bin/editorconfig" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/editorconfig.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\editorconfig\bin\editorconfig" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/editorconfig.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../editorconfig/bin/editorconfig" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../editorconfig/bin/editorconfig" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/errno

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../errno/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../errno/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

Vissa filer visades inte eftersom för många filer har ändrats