From a2880ffd5b01a0c8a847f66d4f43047d6f8a27cd Mon Sep 17 00:00:00 2001 From: 1549469775 <1549469775@qq.com> Date: Mon, 11 Nov 2019 23:49:51 +0800 Subject: [PATCH] bp --- api/auth.js | 11 ++ assets/style/_global.scss | 11 +- assets/style/pc.scss | 0 components/base/_base-loading.vue | 5 + components/panel/index.vue | 20 --- components/panel/style.scss | 48 ------- layouts/default.vue | 12 +- middleware/auth.js | 6 + nuxt.config.js | 52 +++++--- package-lock.json | 256 +++++++++++++++++++++++++++++++++++++- package.json | 15 ++- pages/index.vue | 68 ++++------ pages/login.vue | 85 +++++++++++++ plugins/axios.js | 25 ++++ plugins/global-components.js | 19 +++ server/index.js | 10 +- store/index.js | 34 ++++- store/todos.js | 14 ++- 18 files changed, 540 insertions(+), 151 deletions(-) create mode 100644 api/auth.js delete mode 100644 assets/style/pc.scss create mode 100644 components/base/_base-loading.vue delete mode 100644 components/panel/index.vue delete mode 100644 components/panel/style.scss create mode 100644 middleware/auth.js create mode 100644 pages/login.vue create mode 100644 plugins/axios.js create mode 100644 plugins/global-components.js diff --git a/api/auth.js b/api/auth.js new file mode 100644 index 0000000..de1361b --- /dev/null +++ b/api/auth.js @@ -0,0 +1,11 @@ +export default function (req, res, next) { + // req 是 Node.js http request 对象 + +// res.json({code:200}) + // res 是 Node.js http response 对象 + //next是一个调用下一个中间件的函数 + // 如果您的中间件不是最终执行,请不要忘记在最后调用next! + next() +} + + diff --git a/assets/style/_global.scss b/assets/style/_global.scss index 6952be7..bbae598 100644 --- a/assets/style/_global.scss +++ b/assets/style/_global.scss @@ -1,13 +1,4 @@ -html { - width: 100%; -} - -*, -*:before, -*:after { - box-sizing: border-box; - margin: 0; -} @import "./common.scss"; + diff --git a/assets/style/pc.scss b/assets/style/pc.scss deleted file mode 100644 index e69de29..0000000 diff --git a/components/base/_base-loading.vue b/components/base/_base-loading.vue new file mode 100644 index 0000000..38225e3 --- /dev/null +++ b/components/base/_base-loading.vue @@ -0,0 +1,5 @@ + diff --git a/components/panel/index.vue b/components/panel/index.vue deleted file mode 100644 index 559807a..0000000 --- a/components/panel/index.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/components/panel/style.scss b/components/panel/style.scss deleted file mode 100644 index be80932..0000000 --- a/components/panel/style.scss +++ /dev/null @@ -1,48 +0,0 @@ -.panel { - padding-top: em(59); - padding-bottom: em(59); - text-align: center; - color: #131720; - - .panel__wrapper { - overflow: visible; - } - - h2 { - font-size: em(36); - margin-bottom: em(15); - } - - .panel__desc { - display: flex; - justify-content: center; - - .panel__desc__word { - font-size: em(18); - position: relative; - color: #4B4B4B; - - &::before { - content: ""; - position: absolute; - left: em(-100, 18); - top: 50%; - transform: translateY(-50%); - width: em(83); - height: 2px; - background-color: rgba(181, 181, 181, 1); - } - - &::after { - content: ""; - position: absolute; - right: em(-100, 18); - top: 50%; - transform: translateY(-50%); - width: em(83, 18); - height: 1px; - background-color: rgba(181, 181, 181, 1); - } - } - } -} \ No newline at end of file diff --git a/layouts/default.vue b/layouts/default.vue index e58b66d..714f739 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -1,11 +1,19 @@ \ No newline at end of file + + diff --git a/middleware/auth.js b/middleware/auth.js new file mode 100644 index 0000000..c354515 --- /dev/null +++ b/middleware/auth.js @@ -0,0 +1,6 @@ +export default function ({ store, redirect }) { + // console.log(store.state.user) + // if (JSON.stringify(store.getters.user)=='{}') { + // return redirect('/login') + // } +} diff --git a/nuxt.config.js b/nuxt.config.js index 19fd754..404b5f9 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -7,18 +7,21 @@ module.exports = { head: { title: process.env.npm_package_name || '', meta: [ - { charset: 'utf-8' }, - { name: 'viewport', content: 'width=device-width, initial-scale=1, shrink-to-fit=no' }, - { hid: 'description', name: 'description', content: process.env.npm_package_description || '' } + {charset: 'utf-8'}, + {name: 'viewport', content: 'width=device-width, initial-scale=1, shrink-to-fit=no'}, + {hid: 'description', name: 'description', content: process.env.npm_package_description || ''} ], link: [ - { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } + {rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'} ] }, + env: { + baseUrl: process.env.BASE_URL || 'http://localhost:3000' + }, /* ** Customize the progress-bar color */ - loading: { color: '#fff' }, + loading: {color: '#fff'}, /* ** Global CSS */ @@ -29,19 +32,34 @@ module.exports = { ** Plugins to load before mounting the App */ plugins: [ + '~/plugins/axios', + '~/plugins/global-components' ], /* ** Nuxt.js dev-modules */ - devModules: [ - ], + devModules: [], /* ** Nuxt.js modules */ modules: [ + '@nuxtjs/style-resources', // 使用bootstrap-vue - 'bootstrap-vue/nuxt' + 'bootstrap-vue/nuxt', + '@nuxtjs/axios' ], + //https://axios.nuxtjs.org/setup + axios: { + // proxyHeaders: false + retry: {retries: 3} + }, + styleResources: { + // your settings here + sass: [], + scss: ['./assets/style/_global.scss'], + less: [], + stylus: [] + }, /* ** Build configuration */ @@ -49,14 +67,14 @@ module.exports = { /* ** You can extend webpack config here */ - styleResources:{ - scss: 'assets/style/_global.scss' - }, - extend (config, ctx) { - config.resolve.alias['@pages']=path.resolve(__dirname,'pages'); - config.resolve.alias['@assets']=path.resolve(__dirname,'assets'); - config.resolve.alias['@components']=path.resolve(__dirname,'components'); - config.resolve.alias['@images']=path.resolve(__dirname,'assets','images'); + extend(config, ctx) { + config.resolve.alias['@pages'] = path.resolve(__dirname, 'pages'); + config.resolve.alias['@assets'] = path.resolve(__dirname, 'assets'); + config.resolve.alias['@components'] = path.resolve(__dirname, 'components'); + config.resolve.alias['@images'] = path.resolve(__dirname, 'assets', 'images'); } - } + }, + serverMiddleware: [ + '~/api/auth' + ] } diff --git a/package-lock.json b/package-lock.json index bb98c26..567efb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1131,6 +1131,36 @@ "webpackbar": "^3.2.0" } }, + "@nuxtjs/axios": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/axios/-/axios-5.6.0.tgz", + "integrity": "sha512-Rl4nnudm+sSkMtgfSEAeA5bq6aFpbBoYVXLXWaDxfydslukRd2SdEDdGv0gHE7F/jtIw+JfptWDHCHnzuoO/Ng==", + "requires": { + "@nuxtjs/proxy": "^1.3.3", + "axios": "^0.19.0", + "axios-retry": "^3.1.2", + "consola": "^2.10.1" + } + }, + "@nuxtjs/proxy": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@nuxtjs/proxy/-/proxy-1.3.3.tgz", + "integrity": "sha512-ykpCUdOqPOH79mQG30QfWZmbRD8yjTD+TTSBbwow5GkROUQEtXw+HE+q6i+YFpuChvgJNbwVrXdZ3YmfXbZtTw==", + "requires": { + "consola": "^2.5.6", + "http-proxy-middleware": "^0.19.1" + } + }, + "@nuxtjs/style-resources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/style-resources/-/style-resources-1.0.0.tgz", + "integrity": "sha512-tDRcC/pm8B0Kpxtzb/1/HOBkv3/kPD+2FiCiUBGMB7YriRud9OUPw1pnYCsAH9ftwpMJS4k4XOyUY8FCTk6OxA==", + "requires": { + "consola": "^2.4.0", + "glob-all": "^3.1.0", + "sass-resources-loader": "^2.0.0" + } + }, "@nuxtjs/youch": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@nuxtjs/youch/-/youch-4.2.3.tgz", @@ -1763,6 +1793,38 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + } + } + }, + "axios-retry": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.2.tgz", + "integrity": "sha512-+X0mtJ3S0mmia1kTVi1eA3DAC+oWnT2A29g3CpkzcBPMT6vJm+hn/WiV9wPt/KXLHVmg5zev9mWqkPx7bHMovg==", + "requires": { + "is-retry-allowed": "^1.1.0" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -2868,6 +2930,25 @@ "parse-json": "^4.0.0" } }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + }, + "dependencies": { + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -3627,6 +3708,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" + }, "events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", @@ -3995,6 +4081,14 @@ } } }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "requires": { + "debug": "^3.0.0" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4238,6 +4332,30 @@ "path-is-absolute": "^1.0.0" } }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "requires": { + "glob": "^7.0.5", + "yargs": "~1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "requires": { + "minimist": "^0.1.0" + } + } + } + }, "glob-parent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", @@ -4643,6 +4761,27 @@ "toidentifier": "1.0.0" } }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4700,6 +4839,11 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -4857,6 +5001,11 @@ "ci-info": "^1.5.0" } }, + "is-class-hotfix": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz", + "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==" + }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -5026,8 +5175,7 @@ "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" }, "is-stream": { "version": "1.1.0", @@ -5050,6 +5198,16 @@ "has-symbols": "^1.0.0" } }, + "is-type-of": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-type-of/-/is-type-of-1.2.1.tgz", + "integrity": "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==", + "requires": { + "core-util-is": "^1.0.2", + "is-class-hotfix": "~0.0.6", + "isstream": "~0.1.2" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -5251,6 +5409,53 @@ "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" }, + "koa-router": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-7.4.0.tgz", + "integrity": "sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==", + "requires": { + "debug": "^3.1.0", + "http-errors": "^1.3.1", + "koa-compose": "^3.0.0", + "methods": "^1.0.1", + "path-to-regexp": "^1.1.1", + "urijs": "^1.19.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "koa-session": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/koa-session/-/koa-session-5.12.3.tgz", + "integrity": "sha512-r1vRerk6z+J54TtgXPG+oYGj1vwrd889bz55hS7VykWvbtmPNb0q/N7arOHGV8dnstlRyZPP3xCJL20wIf9LwA==", + "requires": { + "crc": "^3.4.4", + "debug": "^3.1.0", + "is-type-of": "^1.0.0", + "uuid": "^3.3.2" + } + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -5294,6 +5499,14 @@ "invert-kv": "^1.0.0" } }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -5346,6 +5559,14 @@ } } }, + "localforage": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.3.tgz", + "integrity": "sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==", + "requires": { + "lie": "3.1.1" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -8618,6 +8839,11 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, "reset-css": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/reset-css/-/reset-css-4.0.1.tgz", @@ -8976,6 +9202,11 @@ "jsonify": "~0.0.0" } }, + "shvl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/shvl/-/shvl-1.3.1.tgz", + "integrity": "sha512-+rRPP46hloYUAEImJcqprUgXu+05Ikqr4h4V+w5i2zJy37nAqtkQKufs3+3S2fDq6JNRrHMIQhB/Vaex+jgAAw==" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -10140,6 +10371,11 @@ "punycode": "^2.1.0" } }, + "urijs": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", + "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==" + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -10398,6 +10634,22 @@ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz", "integrity": "sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==" }, + "vuex-persistedstate": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-2.5.4.tgz", + "integrity": "sha512-XYJhKIwO+ZVlTaXyxKxnplrJ88Fnvk5aDw753bxzRw5/yMKLQ6lq9CDCBex2fwZaQcLibhtgJOxGCHjy9GLSlQ==", + "requires": { + "deepmerge": "^2.1.0", + "shvl": "^1.3.0" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + } + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", diff --git a/package.json b/package.json index 9e96b2f..1ada969 100644 --- a/package.json +++ b/package.json @@ -11,20 +11,33 @@ "generate": "nuxt generate" }, "dependencies": { + "@nuxtjs/axios": "^5.6.0", + "@nuxtjs/style-resources": "^1.0.0", "autoprefixer": "^9.6.1", "bootstrap-vue": "^2.0.0-rc.27", "cross-env": "^5.2.0", "jquery": "^3.4.1", "koa": "^2.6.2", + "koa-router": "^7.4.0", + "koa-session": "^5.12.3", + "localforage": "^1.7.3", + "lodash": "^4.17.15", "node-sass": "^4.12.0", "nuxt": "^2.0.0", "postcss": "^7.0.17", "postcss-loader": "^3.0.0", "reset-css": "^4.0.1", "sass-loader": "^7.2.0", - "sass-resources-loader": "^2.0.1" + "sass-resources-loader": "^2.0.1", + "vuex-persistedstate": "^2.5.4" }, "devDependencies": { "nodemon": "^1.18.9" + }, + "config": { + "nuxt": { + "host": "0.0.0.0", + "port": "5000" + } } } diff --git a/pages/index.vue b/pages/index.vue index 4e62ebc..89974a8 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,63 +1,47 @@ diff --git a/pages/login.vue b/pages/login.vue new file mode 100644 index 0000000..98b6d12 --- /dev/null +++ b/pages/login.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/plugins/axios.js b/plugins/axios.js new file mode 100644 index 0000000..4eb1246 --- /dev/null +++ b/plugins/axios.js @@ -0,0 +1,25 @@ +// onRequest(config) +// onResponse(response) +// onError(err) +// onRequestError(err) +// onResponseError(err) + +export default function ({ $axios,store, redirect }) { + // store.commit('user/setToken','dasdsad') + let token = store.state.user.token; + + $axios.setToken(token, 'Bearer') + + $axios.setHeader('Content-Type', 'application/json') + + $axios.onRequest(config => { + console.log('Making request to ' + config.url) + }) + + $axios.onError(error => { + const code = parseInt(error.response && error.response.status) + if (code === 400) { + redirect('/400') + } + }) +} diff --git a/plugins/global-components.js b/plugins/global-components.js new file mode 100644 index 0000000..b3ff65e --- /dev/null +++ b/plugins/global-components.js @@ -0,0 +1,19 @@ +// 引入vue 及 lodash +import Vue from 'vue' +import upperFirst from 'lodash/upperFirst' // 首字线大写 +import camelCase from 'lodash/camelCase' // 驼峰命名大法 + +// 把 /component/base/ 下的所有 vue 组件 require 进来 +// path: 要引入的组件所在相对路径(相对于当前文件) +// deep: 是否检索子文件夹 +// matchFile: 匹配的文件名称 +// require.context(path, deep, matchFile) +const requireComponent = require.context('../components/base/', false, /_base-[\w-]+\.vue$/) + +// 遍历 require 进来的组件并注册 +requireComponent.keys().forEach((fileName) => { + const componentConfig = requireComponent(fileName) + const componentName = upperFirst( camelCase( fileName.replace(/^\.\/_/, '').replace(/\.\w+$/, '') ) ) + // 全局注册组件 + Vue.component(componentName, componentConfig.default || componentConfig) +}) diff --git a/server/index.js b/server/index.js index f613fc2..519c32b 100644 --- a/server/index.js +++ b/server/index.js @@ -25,11 +25,11 @@ async function start () { await nuxt.ready() } - app.use((ctx) => { - ctx.status = 200 - ctx.respond = false // Bypass Koa's built-in response handling - ctx.req.ctx = ctx // This might be useful later on, e.g. in nuxtServerInit or with nuxt-stash - nuxt.render(ctx.req, ctx.res) + app.use(async (ctx,next) => { + ctx.status = 200 + ctx.respond = false // Bypass Koa's built-in response handling + ctx.req.ctx = ctx // This might be useful later on, e.g. in nuxtServerInit or with nuxt-stash + nuxt.render(ctx.req, ctx.res) }) app.listen(port, host) diff --git a/store/index.js b/store/index.js index b22221c..46a7397 100644 --- a/store/index.js +++ b/store/index.js @@ -1,9 +1,37 @@ +import createPersistedState from 'vuex-persistedstate' +// import localforage from 'localforage' + +// export const plugins = [ createPersistedState({ +// key:'fuckme', +// storage:localforage, +// paths: ['user.token'] //,'room.room' +// }) ] + export const state = () => ({ - counter: 0 + user: {} }) +export const getters = { + user(state){ + return state.user; + } +} + export const mutations = { - increment(state) { - state.counter++ + SET_USER (state,user) { + state.user=user; } } + +export const actions = { + nuxtServerInit({ commit }, { req, res }) { + if (req.session && req.session.user) { + const { username, password } = req.session.user + const user = { + username, + password + } + commit('SET_USER', user) + } + }, +} diff --git a/store/todos.js b/store/todos.js index 797da38..cdc8989 100644 --- a/store/todos.js +++ b/store/todos.js @@ -1,5 +1,6 @@ export const state = () => ({ - list: [] + list: [], + ip:'' }) export const mutations = { @@ -16,5 +17,16 @@ export const mutations = { }, toggle(state, todo) { todo.done = !todo.done + }, + SET_IP(state, ip) { + state.ip = ip } } + + export const actions={ + async getIP ({ commit }) { + const ip = await this.$axios.$get('http://icanhazip.com') + commit('SET_IP', ip) + } + } +