Browse Source

eqwe

master
1549469775 5 years ago
commit
6ce01ffe3d
  1. 91
      .gitignore
  2. 86
      .history/nuxt.config_20191112210759.js
  3. 89
      .history/nuxt.config_20191112210850.js
  4. 29
      README.md
  5. 13
      api/auth.js
  6. 7
      assets/README.md
  7. 8
      assets/style/_global.scss
  8. 297
      assets/style/common.scss
  9. 7
      components/README.md
  10. 5
      components/base/_base-loading.vue
  11. 0
      docs/.nojekyll
  12. 9
      docs/200.html
  13. 11
      docs/README.md
  14. 2
      docs/_nuxt/3aba3795865a3a6df722.js
  15. 1
      docs/_nuxt/70a23dfee6887fa06070.js
  16. 42
      docs/_nuxt/LICENSES
  17. 1
      docs/_nuxt/abe886ed6f5098a6ec11.js
  18. 2
      docs/_nuxt/c3fddfa169fb3fbb257c.js
  19. 1
      docs/_nuxt/e69fb52ab975dddac5e5.js
  20. BIN
      docs/favicon.ico
  21. BIN
      docs/image/bluedialog.png
  22. BIN
      docs/image/icon0.png
  23. BIN
      docs/image/icon1.png
  24. BIN
      docs/image/icon2.png
  25. BIN
      docs/image/icon3.png
  26. BIN
      docs/image/left.png
  27. BIN
      docs/image/logo.png
  28. BIN
      docs/image/right.png
  29. BIN
      docs/image/xu.png
  30. 9
      docs/index.html
  31. 77
      docs/js/flexible.js
  32. 7
      layouts/README.md
  33. 20
      layouts/default.vue
  34. 8
      middleware/README.md
  35. 6
      middleware/auth.js
  36. 89
      nuxt.config.js
  37. 11736
      package-lock.json
  38. 43
      package.json
  39. 6
      pages/README.md
  40. 31
      pages/index.vue
  41. 10
      plugins/README.md
  42. 25
      plugins/axios.js
  43. 19
      plugins/global-components.js
  44. 42
      server/index.js
  45. 11
      static/README.md
  46. BIN
      static/favicon.ico
  47. BIN
      static/image/bluedialog.png
  48. BIN
      static/image/icon0.png
  49. BIN
      static/image/icon1.png
  50. BIN
      static/image/icon2.png
  51. BIN
      static/image/icon3.png
  52. BIN
      static/image/left.png
  53. BIN
      static/image/logo.png
  54. BIN
      static/image/right.png
  55. BIN
      static/image/xu.png
  56. 77
      static/js/flexible.js
  57. 10
      store/README.md
  58. 37
      store/index.js
  59. 32
      store/todos.js

91
.gitignore

@ -0,0 +1,91 @@
# Created by .ignore support plugin (hsz.mobi)
### Node template
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# parcel-bundler cache (https://parceljs.org/)
.cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# Nuxt generate
dist
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless
# IDE / Editor
.idea
.editorconfig
# Service worker
sw.*
# Mac OSX
.DS_Store
# Vim swap files
*.swp

86
.history/nuxt.config_20191112210759.js

@ -0,0 +1,86 @@
const path = require('path');
module.exports = {
mode: 'universal',
/*
** Headers of the page
*/
head: {
// process.env.npm_package_name ||
title: 'Beer',
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 || ''}
],
link: [
{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'},
/*
** Global CSS
*/
css: [
'reset-css/reset.css',
],
/*
** Plugins to load before mounting the App
*/
plugins: [
'~/plugins/axios',
'~/plugins/global-components'
],
/*
** Nuxt.js dev-modules
*/
devModules: [],
/*
** Nuxt.js modules
*/
modules: [
'@nuxtjs/style-resources',
// 使用bootstrap-vue
// 'bootstrap-vue/nuxt',
'@nuxtjs/axios'
],
//https://axios.nuxtjs.org/setup
axios: {
// proxyHeaders: false
retry: {retries: 3},
proxy: true
},
proxy: {
// 跟下面的冲突了
// '/api/': 'http://api.example.com'
},
styleResources: {
// your settings here
sass: [],
scss: ['./assets/style/_global.scss'],
less: [],
stylus: []
},
/*
** Build configuration
*/
build: {
/*
** You can extend webpack config here
*/
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: [
{path:'/api/auth', handler:'~/api/auth'}
]
}

89
.history/nuxt.config_20191112210850.js

@ -0,0 +1,89 @@
const path = require('path');
module.exports = {
mode: 'universal',
/*
** Headers of the page
*/
head: {
// process.env.npm_package_name ||
title: 'Beer',
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 || ''}
],
link: [
{rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'}
]
},
generate:{
dir:'docs'
},
env: {
baseUrl: process.env.BASE_URL || 'http://localhost:3000'
},
/*
** Customize the progress-bar color
*/
loading: {color: '#fff'},
/*
** Global CSS
*/
css: [
'reset-css/reset.css',
],
/*
** Plugins to load before mounting the App
*/
plugins: [
'~/plugins/axios',
'~/plugins/global-components'
],
/*
** Nuxt.js dev-modules
*/
devModules: [],
/*
** Nuxt.js modules
*/
modules: [
'@nuxtjs/style-resources',
// 使用bootstrap-vue
// 'bootstrap-vue/nuxt',
'@nuxtjs/axios'
],
//https://axios.nuxtjs.org/setup
axios: {
// proxyHeaders: false
retry: {retries: 3},
proxy: true
},
proxy: {
// 跟下面的冲突了
// '/api/': 'http://api.example.com'
},
styleResources: {
// your settings here
sass: [],
scss: ['./assets/style/_global.scss'],
less: [],
stylus: []
},
/*
** Build configuration
*/
build: {
/*
** You can extend webpack config here
*/
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: [
{path:'/api/auth', handler:'~/api/auth'}
]
}

29
README.md

@ -0,0 +1,29 @@
# huaqian
> My primo Nuxt.js project
## Build Setup
``` bash
# install dependencies
$ npm run install
# serve with hot reload at localhost:3000
$ npm run dev
# build for production and launch server
$ npm run build
$ npm run start
# generate static project
$ npm run generate
```
For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org).
1
2
3

13
api/auth.js

@ -0,0 +1,13 @@
export default function (req,res,next) {
// req 是 Node.js http request 对象
// console.log(req.ctx.body={code:200})
// console.log(res)
// ctx.body={
// code:200
// }
//next是一个调用下一个中间件的函数
// 如果您的中间件不是最终执行,请不要忘记在最后调用next!
next()
}

7
assets/README.md

@ -0,0 +1,7 @@
# ASSETS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your un-compiled assets such as LESS, SASS, or JavaScript.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked).

8
assets/style/_global.scss

@ -0,0 +1,8 @@
@import "./common.scss";
html{
width: 100vw;
height: 100vh;
}

297
assets/style/common.scss

@ -0,0 +1,297 @@
// 清除浮动
%clearfix {
&:after,
&:before {
content: " ";
display: table;
}
&:after {
clear: both;
}
}
// 文字溢出省略仅webkit支持多
@mixin ellipsis($lines) {
@if ($lines==1) {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@else {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: $lines;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
}
}
%ellipsis {
@include ellipsis(1);
}
// 去掉滚动条
%no-scrollbar {
&::-webkit-scrollbar {
display: none !important;
width: 0 !important;
height: 0 !important;
-webkit-appearance: none;
opacity: 0 !important;
}
}
// 使用 @extend %no-scrollbar;
// 一像素边框
%_onepxElement {
content: '';
position: absolute;
}
%_onepxTopBottom {
@extend %_onepxElement;
left: 0;
right: 0;
}
%_onepxLeftRight {
@extend %_onepxElement;
top: 0;
bottom: 0;
}
@mixin setDprBorder($direction: tb) {
@for $i from 1 through 4 {
@media screen and (-webkit-min-device-pixel-ratio: $i) {
@if($direction==tb) {
transform: scaleY(1 / $i);
}
@else if($direction==lr) {
transform: scaleX(1 / $i);
}
@else if($direction==full) {
transform: scale(1 / $i);
}
}
}
}
/*
* 一像素边框
* $direction: 边框方向默认底边框
* $style: 线条样式默认solid
* $color: 边框颜色
*/
@mixin one-px-border($direction: bottom, $style: solid, $color: #e5e5e5) {
position: relative;
$border: 1px $style $color;
@if ($direction==bottom) {
&:after {
@extend %_onepxTopBottom;
@include setDprBorder(tb);
border-top: $border;
bottom: 0;
}
}
@else if ($direction==top) {
&:before {
@extend %_onepxTopBottom;
@include setDprBorder(tb);
border-top: $border;
top: 0;
}
}
@else if ($direction==left) {
&:before {
@extend %_onepxLeftRight;
@include setDprBorder(lr);
border-left: $border;
left: 0;
}
}
@else if ($direction==right) {
&:after {
@extend %_onepxLeftRight;
@include setDprBorder(lr);
border-left: $border;
right: 0;
}
}
}
// 默认下边框
%one-px-border {
@include one-px-border();
}
// 四边一像素边框
@mixin full-px-border($color: #e5e5e5, $radius: 0, $zIndex: -1) {
position: relative;
z-index: 1;
&:before {
content: '';
position: absolute;
z-index: $zIndex;
border: 1px solid $color;
width: 200%;
height: 200%;
border-radius: inherit;
transform: scale(.5);
transform-origin: top left;
border-radius: $radius * 2;
left: 0;
top: 0
}
}
%full-px-border {
@include full-px-border();
}
// 去除单位并返回数值
@function strip-units($number) {
@return $number / ($number * 0 + 1);
}
// px转rem
@mixin px2rem($attr, $num, $base: 37.5) {
$list: (); //存储所有转换后的值
// 遍历所有值并转换为rem单位
@for $i from 1 through length($num) {
// 计算单个rem值
$value: strip-units(nth($num, $i)) / $base * 1rem;
// 添加到列表中
$list: append($list, $value);
}
// 设置属性值
#{$attr}:$list;
}
@function px2rem($num, $base: 37.5) {
@return strip-units($num) / $base * 1rem;
}
// 居中一个元素
@mixin center($position) {
position: absolute;
@if $position=='vertical' {
top: 50%;
transform: translateY(-50%);
}
@else if $position=='horizontal' {
left: 50%;
transform: translateX(-50%);
}
@else if $position=='both' {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
// 该函数可以用来做各种方向的背景渐变
@mixin background-gradient($start-color, $end-color, $orientation) {
background: $start-color;
@if $orientation=='vertical' {
background: linear-gradient(to bottom, $start-color, $end-color);
}
@else if $orientation=='horizontal' {
background: linear-gradient(to right, $start-color, $end-color);
}
@else {
background: radial-gradient(ellipse at center, $start-color, $end-color);
}
}
//
@mixin triangle($direction: down, $size: 5px, $color: #F96001) {
width: 0px;
height: 0px;
@if ($direction==left) {
border-top: $size solid transparent;
border-bottom: $size solid transparent;
border-right: $size solid $color;
}
@else if ($direction==right) {
border-top: $size solid transparent;
border-bottom: $size solid transparent;
border-left: $size solid $color;
}
@else if ($direction==down) {
border-left: $size solid transparent;
border-right: $size solid transparent;
border-top: $size solid $color;
}
@else {
border-left: $size solid transparent;
border-right: $size solid transparent;
border-bottom: $size solid $color;
}
}
// 媒体查询
$width-small: 400px;
$width-medium: 760px;
$width-large: 1200px;
@mixin responsive($width) {
@if $width==wide-screens {
@media only screen and (max-width: $width-large) {
@content;
}
}
@else if $width==medium-screens {
@media only screen and (max-width: $width-medium) {
@content;
}
}
@else if $width==small-screens {
@media only screen and (max-width: $width-small) {
@content;
}
}
}
// @include responsive(wide-screens) {
// width: 80%;
// }
// @include responsive(medium-screens) {
// width: 50%;
// font-size: 14px;
// }
// @include responsive(small-screens) {
// float: none;
// width: 100%;
// font-size: 12px;
// }

7
components/README.md

@ -0,0 +1,7 @@
# COMPONENTS
**This directory is not required, you can delete it if you don't want to use it.**
The components directory contains your Vue.js Components.
_Nuxt.js doesn't supercharge these components._

5
components/base/_base-loading.vue

@ -0,0 +1,5 @@
<template>
<div>
dsads
</div>
</template>

0
docs/.nojekyll

9
docs/200.html

@ -0,0 +1,9 @@
<!doctype html>
<html data-n-head="">
<head data-n-head="">
<title data-n-head="true">Beer</title><meta data-n-head="true" charset="utf-8"><meta data-n-head="true" name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta data-n-head="true" data-hid="description" name="description" content="My primo Nuxt.js project"><link data-n-head="true" rel="icon" type="image/x-icon" href="/favicon.ico"><link rel="preload" href="/_nuxt/70a23dfee6887fa06070.js" as="script"><link rel="preload" href="/_nuxt/c3fddfa169fb3fbb257c.js" as="script"><link rel="preload" href="/_nuxt/3aba3795865a3a6df722.js" as="script"><link rel="preload" href="/_nuxt/abe886ed6f5098a6ec11.js" as="script">
</head>
<body data-n-head="">
<div id="__nuxt"><style>#nuxt-loading{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 #fff;-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(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
<script type="text/javascript" src="/_nuxt/70a23dfee6887fa06070.js"></script><script type="text/javascript" src="/_nuxt/c3fddfa169fb3fbb257c.js"></script><script type="text/javascript" src="/_nuxt/3aba3795865a3a6df722.js"></script><script type="text/javascript" src="/_nuxt/abe886ed6f5098a6ec11.js"></script></body>
</html>

11
docs/README.md

@ -0,0 +1,11 @@
# STATIC
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your static files.
Each file inside this directory is mapped to `/`.
Thus you'd want to delete this README.md before deploying to production.
Example: `/static/robots.txt` is mapped as `/robots.txt`.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static).

2
docs/_nuxt/3aba3795865a3a6df722.js

File diff suppressed because one or more lines are too long

1
docs/_nuxt/70a23dfee6887fa06070.js

@ -0,0 +1 @@
!function(e){function r(data){for(var r,n,l=data[0],f=data[1],d=data[2],i=0,h=[];i<l.length;i++)n=l[i],Object.prototype.hasOwnProperty.call(o,n)&&o[n]&&h.push(o[n][0]),o[n]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);for(v&&v(data);h.length;)h.shift()();return c.push.apply(c,d||[]),t()}function t(){for(var e,i=0;i<c.length;i++){for(var r=c[i],t=!0,n=1;n<r.length;n++){var f=r[n];0!==o[f]&&(t=!1)}t&&(c.splice(i--,1),e=l(l.s=r[0]))}return e}var n={},o={3:0},c=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=o[e]=[r,n]});r.push(t[2]=n);var c,script=document.createElement("script");script.charset="utf-8",script.timeout=120,l.nc&&script.setAttribute("nonce",l.nc),script.src=function(e){return l.p+""+{2:"e69fb52ab975dddac5e5"}[e]+".js"}(e);var f=new Error;c=function(r){script.onerror=script.onload=null,clearTimeout(d);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;f.message="Loading chunk "+e+" failed.\n("+n+": "+c+")",f.name="ChunkLoadError",f.type=n,f.request=c,t[1](f)}o[e]=void 0}};var d=setTimeout(function(){c({type:"timeout",target:script})},12e4);script.onerror=script.onload=c,document.head.appendChild(script)}return Promise.all(r)},l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(object,e){return Object.prototype.hasOwnProperty.call(object,e)},l.p="/_nuxt/",l.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],d=f.push.bind(f);f.push=r,f=f.slice();for(var i=0;i<f.length;i++)r(f[i]);var v=d;t()}([]);

42
docs/_nuxt/LICENSES

@ -0,0 +1,42 @@
/*!
* Vue.js v2.6.10
* (c) 2014-2019 Evan You
* Released under the MIT License.
*/
/*!
* vue-router v3.1.2
* (c) 2019 Evan You
* @license MIT
*/
/**
* vuex v3.1.1
* (c) 2019 Evan You
* @license MIT
*/
/**
* vue-meta v1.6.0
* (c) 2019 Declan de Wet & Sébastien Chopin (@Atinux)
* @license MIT
*/
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
/*!
* vue-no-ssr v1.1.1
* (c) 2018-present egoist <0x142857@gmail.com>
* Released under the MIT License.
*/

1
docs/_nuxt/abe886ed6f5098a6ec11.js

File diff suppressed because one or more lines are too long

2
docs/_nuxt/c3fddfa169fb3fbb257c.js

File diff suppressed because one or more lines are too long

1
docs/_nuxt/e69fb52ab975dddac5e5.js

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{215:function(e,t,n){"use strict";n.r(t);n(37);var r,c,o=n(5),f={asyncData:(c=Object(o.a)(regeneratorRuntime.mark(function e(t){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t.$axios,e.abrupt("return",{});case 2:case"end":return e.stop()}},e)})),function(e){return c.apply(this,arguments)}),fetch:(r=Object(o.a)(regeneratorRuntime.mark(function e(t){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.store,t.params,t.$axios;case 1:case"end":return e.stop()}},e)})),function(e){return r.apply(this,arguments)}),mounted:function(){},data:function(){return{}},methods:{}},l=n(16),component=Object(l.a)(f,function(){var e=this.$createElement;return(this._self._c||e)("div")},[],!1,null,null,null);t.default=component.exports}}]);

BIN
docs/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
docs/image/bluedialog.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

BIN
docs/image/icon0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
docs/image/icon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
docs/image/icon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B

BIN
docs/image/icon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

BIN
docs/image/left.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
docs/image/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
docs/image/right.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
docs/image/xu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

9
docs/index.html

@ -0,0 +1,9 @@
<!doctype html>
<html data-n-head-ssr data-n-head="">
<head data-n-head="">
<title data-n-head="true">Beer</title><meta data-n-head="true" charset="utf-8"><meta data-n-head="true" name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta data-n-head="true" data-hid="description" name="description" content="My primo Nuxt.js project"><link data-n-head="true" rel="icon" type="image/x-icon" href="/favicon.ico"><link rel="preload" href="/_nuxt/70a23dfee6887fa06070.js" as="script"><link rel="preload" href="/_nuxt/c3fddfa169fb3fbb257c.js" as="script"><link rel="preload" href="/_nuxt/3aba3795865a3a6df722.js" as="script"><link rel="preload" href="/_nuxt/abe886ed6f5098a6ec11.js" as="script"><link rel="preload" href="/_nuxt/e69fb52ab975dddac5e5.js" as="script"><style data-vue-ssr-id="290f013b:0 17cfdfa9:0 1112905c:0">a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}[hidden]{display:none}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}.nuxt-progress{position:fixed;top:0;left:0;right:0;height:2px;width:0;opacity:1;transition:width .1s,opacity .4s;background-color:#fff;z-index:999999}.nuxt-progress.nuxt-progress-notransition{transition:none}.nuxt-progress-failed{background-color:red}html[data-v-e0d65c42]{width:100vw;height:100vh}.default.layout[data-v-e0d65c42]{background:#f5f5d5;position:fixed;left:0;right:0;bottom:0;top:0}</style>
</head>
<body data-n-head="">
<div data-server-rendered="true" id="__nuxt"><!----><div id="__layout"><div class="default layout" data-v-e0d65c42><div data-v-e0d65c42></div></div></div></div><script>window.__NUXT__={layout:"default",data:[{}],error:null,state:{user:{},todos:{list:[],ip:""}},serverRendered:!0}</script><script src="/_nuxt/70a23dfee6887fa06070.js" defer></script><script src="/_nuxt/e69fb52ab975dddac5e5.js" defer></script><script src="/_nuxt/c3fddfa169fb3fbb257c.js" defer></script><script src="/_nuxt/3aba3795865a3a6df722.js" defer></script><script src="/_nuxt/abe886ed6f5098a6ec11.js" defer></script>
</body>
</html>

77
docs/js/flexible.js

@ -0,0 +1,77 @@
(function (designWidth, maxWidth) {
var doc = document,
win = window;
var docEl = doc.documentElement;
var metaEl,
metaElCon;
var styleText,
remStyle = document.createElement("style");
var tid;
function refreshRem() {
// var width = parseInt(window.screen.width); // uc有bug
var width = docEl.getBoundingClientRect().width;
if (!maxWidth) {
maxWidth = 540;
};
if (width > maxWidth) { // 淘宝做法:限制在540的屏幕下,这样100%就跟10rem不一样了
width = maxWidth;
}
var rem = width * 100 / designWidth;
// var rem = width / 10; // 如果要兼容vw的话分成10份 淘宝做法
//docEl.style.fontSize = rem + "px"; //旧的做法,在uc浏览器下面会有切换横竖屏时定义了font-size的标签不起作用的bug
remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
}
// 设置 viewport ,有的话修改 没有的话设置
metaEl = doc.querySelector('meta[name="viewport"]');
// 20171219修改:增加 viewport-fit=cover ,用于适配iphoneX
metaElCon = "width=device-width,initial-scale=1,maximum-scale=1.0,user-scalable=no,viewport-fit=cover";
if (metaEl) {
metaEl.setAttribute("content", metaElCon);
} else {
metaEl = doc.createElement("meta");
metaEl.setAttribute("name", "viewport");
metaEl.setAttribute("content", metaElCon);
if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(metaEl);
} else {
var wrap = doc.createElement("div");
wrap.appendChild(metaEl);
doc.write(wrap.innerHTML);
wrap = null;
}
}
//要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
refreshRem();
if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(remStyle);
} else {
var wrap = doc.createElement("div");
wrap.appendChild(remStyle);
doc.write(wrap.innerHTML);
wrap = null;
}
win.addEventListener("resize", function () {
clearTimeout(tid); //防止执行两次
tid = setTimeout(refreshRem, 300);
}, false);
win.addEventListener("pageshow", function (e) {
if (e.persisted) { // 浏览器后退的时候重新计算
clearTimeout(tid);
tid = setTimeout(refreshRem, 300);
}
}, false);
if (doc.readyState === "complete") {
doc.body.style.fontSize = "16px";
} else {
doc.addEventListener("DOMContentLoaded", function (e) {
doc.body.style.fontSize = "16px";
}, false);
}
})(750, 750);

7
layouts/README.md

@ -0,0 +1,7 @@
# LAYOUTS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your Application Layouts.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts).

20
layouts/default.vue

@ -0,0 +1,20 @@
<template>
<div class="default layout">
<nuxt />
</div>
</template>
<script>
export default {
components: {}
};
</script>
<style lang="scss" scoped>
.default.layout {
background: #f5f5d5;
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
}
</style>

8
middleware/README.md

@ -0,0 +1,8 @@
# MIDDLEWARE
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your application middleware.
Middleware let you define custom functions that can be run before rendering either a page or a group of pages.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware).

6
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')
// }
}

89
nuxt.config.js

@ -0,0 +1,89 @@
const path = require('path');
module.exports = {
mode: 'universal',
/*
** Headers of the page
*/
head: {
// process.env.npm_package_name ||
title: 'Beer',
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 || ''}
],
link: [
{rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'}
]
},
generate:{
dir:'docs'
},
env: {
baseUrl: process.env.BASE_URL || 'http://localhost:3000'
},
/*
** Customize the progress-bar color
*/
loading: {color: '#fff'},
/*
** Global CSS
*/
css: [
'reset-css/reset.css',
],
/*
** Plugins to load before mounting the App
*/
plugins: [
'~/plugins/axios',
'~/plugins/global-components'
],
/*
** Nuxt.js dev-modules
*/
devModules: [],
/*
** Nuxt.js modules
*/
modules: [
'@nuxtjs/style-resources',
// 使用bootstrap-vue
// 'bootstrap-vue/nuxt',
'@nuxtjs/axios'
],
//https://axios.nuxtjs.org/setup
axios: {
// proxyHeaders: false
retry: {retries: 3},
proxy: true
},
proxy: {
// 跟下面的冲突了
// '/api/': 'http://api.example.com'
},
styleResources: {
// your settings here
sass: [],
scss: ['./assets/style/_global.scss'],
less: [],
stylus: []
},
/*
** Build configuration
*/
build: {
/*
** You can extend webpack config here
*/
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: [
{path:'/api/auth', handler:'~/api/auth'}
]
}

11736
package-lock.json

File diff suppressed because it is too large

43
package.json

@ -0,0 +1,43 @@
{
"name": "huaqian",
"version": "1.0.0",
"description": "My primo Nuxt.js project",
"author": "1549469775",
"private": true,
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server",
"build": "nuxt build",
"start": "cross-env NODE_ENV=production node server/index.js",
"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",
"vuex-persistedstate": "^2.5.4"
},
"devDependencies": {
"nodemon": "^1.18.9"
},
"config": {
"nuxt": {
"host": "0.0.0.0",
"port": "5000"
}
}
}

6
pages/README.md

@ -0,0 +1,6 @@
# PAGES
This directory contains your Application Views and Routes.
The framework reads all the `*.vue` files inside this directory and creates the router of your application.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing).

31
pages/index.vue

@ -0,0 +1,31 @@
<template>
<div>
</div>
</template>
<script>
export default {
async asyncData({ $axios }) {
return { }
},
async fetch ({ store, params,$axios }) {
},
mounted(){
},
data() {
return {
}
},
methods: {
}
}
</script>
<style lang='scss'>
</style>

10
plugins/README.md

@ -0,0 +1,10 @@
# PLUGINS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains Javascript plugins that you want to run before mounting the root Vue.js application.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins).
用于使用插件的地方,例如vue-swiper

25
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')
}
})
}

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

42
server/index.js

@ -0,0 +1,42 @@
const Koa = require('koa')
const consola = require('consola')
const { Nuxt, Builder } = require('nuxt')
const app = new Koa()
// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = app.env !== 'production'
async function start () {
// Instantiate nuxt.js
const nuxt = new Nuxt(config)
const {
host = process.env.HOST || '127.0.0.1',
port = process.env.PORT || 3000
} = nuxt.options.server
// Build in development
if (config.dev) {
const builder = new Builder(nuxt)
await builder.build()
} else {
await nuxt.ready()
}
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)
consola.ready({
message: `Server listening on http://${host}:${port}`,
badge: true
})
}
start()

11
static/README.md

@ -0,0 +1,11 @@
# STATIC
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your static files.
Each file inside this directory is mapped to `/`.
Thus you'd want to delete this README.md before deploying to production.
Example: `/static/robots.txt` is mapped as `/robots.txt`.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static).

BIN
static/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/image/bluedialog.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

BIN
static/image/icon0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/image/icon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
static/image/icon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B

BIN
static/image/icon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

BIN
static/image/left.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/image/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/image/right.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/image/xu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

77
static/js/flexible.js

@ -0,0 +1,77 @@
(function (designWidth, maxWidth) {
var doc = document,
win = window;
var docEl = doc.documentElement;
var metaEl,
metaElCon;
var styleText,
remStyle = document.createElement("style");
var tid;
function refreshRem() {
// var width = parseInt(window.screen.width); // uc有bug
var width = docEl.getBoundingClientRect().width;
if (!maxWidth) {
maxWidth = 540;
};
if (width > maxWidth) { // 淘宝做法:限制在540的屏幕下,这样100%就跟10rem不一样了
width = maxWidth;
}
var rem = width * 100 / designWidth;
// var rem = width / 10; // 如果要兼容vw的话分成10份 淘宝做法
//docEl.style.fontSize = rem + "px"; //旧的做法,在uc浏览器下面会有切换横竖屏时定义了font-size的标签不起作用的bug
remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
}
// 设置 viewport ,有的话修改 没有的话设置
metaEl = doc.querySelector('meta[name="viewport"]');
// 20171219修改:增加 viewport-fit=cover ,用于适配iphoneX
metaElCon = "width=device-width,initial-scale=1,maximum-scale=1.0,user-scalable=no,viewport-fit=cover";
if (metaEl) {
metaEl.setAttribute("content", metaElCon);
} else {
metaEl = doc.createElement("meta");
metaEl.setAttribute("name", "viewport");
metaEl.setAttribute("content", metaElCon);
if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(metaEl);
} else {
var wrap = doc.createElement("div");
wrap.appendChild(metaEl);
doc.write(wrap.innerHTML);
wrap = null;
}
}
//要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
refreshRem();
if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(remStyle);
} else {
var wrap = doc.createElement("div");
wrap.appendChild(remStyle);
doc.write(wrap.innerHTML);
wrap = null;
}
win.addEventListener("resize", function () {
clearTimeout(tid); //防止执行两次
tid = setTimeout(refreshRem, 300);
}, false);
win.addEventListener("pageshow", function (e) {
if (e.persisted) { // 浏览器后退的时候重新计算
clearTimeout(tid);
tid = setTimeout(refreshRem, 300);
}
}, false);
if (doc.readyState === "complete") {
doc.body.style.fontSize = "16px";
} else {
doc.addEventListener("DOMContentLoaded", function (e) {
doc.body.style.fontSize = "16px";
}, false);
}
})(750, 750);

10
store/README.md

@ -0,0 +1,10 @@
# STORE
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your Vuex Store files.
Vuex Store option is implemented in the Nuxt.js framework.
Creating a file in this directory automatically activates the option in the framework.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store).

37
store/index.js

@ -0,0 +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 = () => ({
user: {}
})
export const getters = {
user(state){
return state.user;
}
}
export const mutations = {
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)
// }
},
}

32
store/todos.js

@ -0,0 +1,32 @@
export const state = () => ({
list: [],
ip:''
})
export const mutations = {
add(state, text) {
state.list.push({
text: text,
done: false
})
},
remove(state, {
todo
}) {
state.list.splice(state.list.indexOf(todo), 1)
},
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)
}
}
Loading…
Cancel
Save