├── .babelrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── README.md
├── _config.yml
├── build
├── build.js
├── check-versions.js
├── logo.png
├── utils.js
├── vue-loader.conf.js
├── webpack.base.conf.js
├── webpack.dev.conf.js
└── webpack.prod.conf.js
├── config
├── dev.env.js
├── index.js
└── prod.env.js
├── dist
├── index.html
└── static
│ ├── css
│ ├── app.9b21055ce9c6856f3c8acd23a25f953b.css
│ ├── app.9b21055ce9c6856f3c8acd23a25f953b.css.gz
│ └── app.9b21055ce9c6856f3c8acd23a25f953b.css.map
│ ├── fonts
│ └── element-icons.6f0a763.ttf
│ ├── img
│ └── logo.fd80e1d.jpg
│ └── js
│ ├── 0.3a9aa42a329f9b43d8d8.js
│ ├── 0.3a9aa42a329f9b43d8d8.js.map
│ ├── 1.4820c59af53e9840bc88.js
│ ├── 1.4820c59af53e9840bc88.js.gz
│ ├── 1.4820c59af53e9840bc88.js.map
│ ├── 2.34a849fc09a8134d7c4a.js
│ ├── 2.34a849fc09a8134d7c4a.js.gz
│ ├── 2.34a849fc09a8134d7c4a.js.map
│ ├── 3.9bfee001cf87b62d6d89.js
│ ├── 3.9bfee001cf87b62d6d89.js.map
│ ├── 4.63b0c96043a372cc3690.js
│ ├── 4.63b0c96043a372cc3690.js.map
│ ├── 5.d1d7303e40cf7949eead.js
│ ├── 5.d1d7303e40cf7949eead.js.map
│ ├── app.2fb34aa4ce1edba4a0b5.js
│ ├── app.2fb34aa4ce1edba4a0b5.js.map
│ ├── manifest.edd1a25d37861aeb8ac9.js
│ ├── manifest.edd1a25d37861aeb8ac9.js.map
│ ├── vendor.df53402265652c8f9c64.js
│ ├── vendor.df53402265652c8f9c64.js.gz
│ └── vendor.df53402265652c8f9c64.js.map
├── index.html
├── package-lock.json
├── package.json
├── screenshots
├── detail.jpg
├── home.jpg
├── login.jpg
└── register.jpg
├── src
├── App.vue
├── assets
│ ├── css
│ │ └── base.css
│ └── images
│ │ ├── login_bg.jpg
│ │ └── logo.jpg
├── common
│ ├── api.js
│ └── mockdata.js
├── components
│ ├── aside.vue
│ └── footer.vue
├── main.js
├── pages
│ ├── demo
│ │ └── index.vue
│ ├── home
│ │ └── index.vue
│ ├── login
│ │ ├── login.vue
│ │ └── register.vue
│ └── post
│ │ └── single.vue
├── router
│ └── index.js
├── store
│ ├── action.js
│ ├── index.js
│ ├── mutation.js
│ └── state.js
└── utils
│ ├── env.js
│ ├── fetch.js
│ └── mUtils.js
└── static
└── .gitkeep
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false,
5 | "targets": {
6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7 | }
8 | }],
9 | "stage-2"
10 | ],
11 | "plugins": ["transform-vue-jsx", "transform-runtime"]
12 | }
13 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | /build/
2 | /config/
3 | /dist/
4 | /*.js
5 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | // https://eslint.org/docs/user-guide/configuring
2 |
3 | module.exports = {
4 | root: true,
5 | parserOptions: {
6 | parser: 'babel-eslint'
7 | },
8 | env: {
9 | browser: true,
10 | },
11 | extends: [
12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
14 | 'plugin:vue/essential',
15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md
16 | 'standard'
17 | ],
18 | // required to lint *.vue files
19 | plugins: [
20 | 'vue'
21 | ],
22 | // add your custom rules here
23 | rules: {
24 | // allow async-await
25 | 'generator-star-spacing': 'off',
26 | // allow debugger during development
27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | npm-debug.log*
4 | yarn-debug.log*
5 | yarn-error.log*
6 |
7 | # Editor directories and files
8 | .idea
9 | .vscode
10 | *.suo
11 | *.ntvs*
12 | *.njsproj
13 | *.sln
14 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # h-blog
2 |
3 | > A Vue.js project 用elementUI模仿[我的博客](http://www.hehaibao.com/),简单的写的几个练习页面,仅供参考。
4 |
5 | ## 技术栈
6 |
7 | vue-cli(vue 2.x + webpack + vue-router) + elementUI + ES6 + mock + axios
8 |
9 | 本地代码已全部通过ESlint检测。
10 |
11 | ## 在线预览
12 |
13 | https://hehaibao.github.io/h-blog/dist/index.html
14 |
15 | ## 主要功能
16 |
17 | - [x] 首页(含mock)
18 | 
19 |
20 | - [x] 文章详情页
21 | 
22 |
23 | - [x] 登录页(含验证和是否登录的逻辑)
24 | 
25 |
26 | - [x] 注册页(含验证)
27 | 
28 |
29 | 里面涉及到了路由的导航守卫,组件的复用,sessionStorage存储是否登录状态,父子组件通信,elementUI的一些用法 等等
30 |
31 | 更多功能,后续有时间会继续添加..
32 |
33 | ## 如何使用?
34 |
35 | ``` bash
36 | # clone
37 | git clone https://github.com/hehaibao/h-blog.git
38 |
39 | # cd dir
40 | cd h-blog
41 |
42 | # install dependencies
43 | npm install
44 |
45 | # serve with hot reload at localhost:8080
46 | npm run dev
47 |
48 | or
49 |
50 | npm start
51 |
52 | # build for production with minification
53 | npm run build
54 |
55 | # build for production and view the bundle analyzer report
56 | npm run build --report
57 | ```
58 |
59 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
60 |
61 |
62 | ## 说明
63 |
64 | > 如果对您有帮助,您可以点右上角 "Star" 支持一下 谢谢! ^_^
65 |
66 | > 或者您可以 "follow" 一下,我会不断开源更多的有趣的项目
67 |
68 | > 开发环境 macOS 10.12.6 Chrome 68 nodejs 6.10.0
69 |
70 | > 如有问题请直接在 Issues 中提,或者您发现问题并有非常好的解决方案,欢迎 PR 👍
71 |
72 |
73 | ## License
74 |
75 | MIT
76 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-minimal
--------------------------------------------------------------------------------
/build/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | require('./check-versions')()
3 |
4 | process.env.NODE_ENV = 'production'
5 |
6 | const ora = require('ora')
7 | const rm = require('rimraf')
8 | const path = require('path')
9 | const chalk = require('chalk')
10 | const webpack = require('webpack')
11 | const config = require('../config')
12 | const webpackConfig = require('./webpack.prod.conf')
13 |
14 | const spinner = ora('building for production...')
15 | spinner.start()
16 |
17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18 | if (err) throw err
19 | webpack(webpackConfig, (err, stats) => {
20 | spinner.stop()
21 | if (err) throw err
22 | process.stdout.write(stats.toString({
23 | colors: true,
24 | modules: false,
25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26 | chunks: false,
27 | chunkModules: false
28 | }) + '\n\n')
29 |
30 | if (stats.hasErrors()) {
31 | console.log(chalk.red(' Build failed with errors.\n'))
32 | process.exit(1)
33 | }
34 |
35 | console.log(chalk.cyan(' Build complete.\n'))
36 | console.log(chalk.yellow(
37 | ' Tip: built files are meant to be served over an HTTP server.\n' +
38 | ' Opening index.html over file:// won\'t work.\n'
39 | ))
40 | })
41 | })
42 |
--------------------------------------------------------------------------------
/build/check-versions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const chalk = require('chalk')
3 | const semver = require('semver')
4 | const packageConfig = require('../package.json')
5 | const shell = require('shelljs')
6 |
7 | function exec (cmd) {
8 | return require('child_process').execSync(cmd).toString().trim()
9 | }
10 |
11 | const versionRequirements = [
12 | {
13 | name: 'node',
14 | currentVersion: semver.clean(process.version),
15 | versionRequirement: packageConfig.engines.node
16 | }
17 | ]
18 |
19 | if (shell.which('npm')) {
20 | versionRequirements.push({
21 | name: 'npm',
22 | currentVersion: exec('npm --version'),
23 | versionRequirement: packageConfig.engines.npm
24 | })
25 | }
26 |
27 | module.exports = function () {
28 | const warnings = []
29 |
30 | for (let i = 0; i < versionRequirements.length; i++) {
31 | const mod = versionRequirements[i]
32 |
33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34 | warnings.push(mod.name + ': ' +
35 | chalk.red(mod.currentVersion) + ' should be ' +
36 | chalk.green(mod.versionRequirement)
37 | )
38 | }
39 | }
40 |
41 | if (warnings.length) {
42 | console.log('')
43 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
44 | console.log()
45 |
46 | for (let i = 0; i < warnings.length; i++) {
47 | const warning = warnings[i]
48 | console.log(' ' + warning)
49 | }
50 |
51 | console.log()
52 | process.exit(1)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/build/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/build/logo.png
--------------------------------------------------------------------------------
/build/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const config = require('../config')
4 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
5 | const packageConfig = require('../package.json')
6 |
7 | exports.assetsPath = function (_path) {
8 | const assetsSubDirectory = process.env.NODE_ENV === 'production'
9 | ? config.build.assetsSubDirectory
10 | : config.dev.assetsSubDirectory
11 |
12 | return path.posix.join(assetsSubDirectory, _path)
13 | }
14 |
15 | exports.cssLoaders = function (options) {
16 | options = options || {}
17 |
18 | const cssLoader = {
19 | loader: 'css-loader',
20 | options: {
21 | sourceMap: options.sourceMap
22 | }
23 | }
24 |
25 | const postcssLoader = {
26 | loader: 'postcss-loader',
27 | options: {
28 | sourceMap: options.sourceMap
29 | }
30 | }
31 |
32 | // generate loader string to be used with extract text plugin
33 | function generateLoaders (loader, loaderOptions) {
34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35 |
36 | if (loader) {
37 | loaders.push({
38 | loader: loader + '-loader',
39 | options: Object.assign({}, loaderOptions, {
40 | sourceMap: options.sourceMap
41 | })
42 | })
43 | }
44 |
45 | // Extract CSS when that option is specified
46 | // (which is the case during production build)
47 | if (options.extract) {
48 | return ExtractTextPlugin.extract({
49 | use: loaders,
50 | fallback: 'vue-style-loader'
51 | })
52 | } else {
53 | return ['vue-style-loader'].concat(loaders)
54 | }
55 | }
56 |
57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html
58 | return {
59 | css: generateLoaders(),
60 | postcss: generateLoaders(),
61 | less: generateLoaders('less'),
62 | sass: generateLoaders('sass', { indentedSyntax: true }),
63 | scss: generateLoaders('sass'),
64 | stylus: generateLoaders('stylus'),
65 | styl: generateLoaders('stylus')
66 | }
67 | }
68 |
69 | // Generate loaders for standalone style files (outside of .vue)
70 | exports.styleLoaders = function (options) {
71 | const output = []
72 | const loaders = exports.cssLoaders(options)
73 |
74 | for (const extension in loaders) {
75 | const loader = loaders[extension]
76 | output.push({
77 | test: new RegExp('\\.' + extension + '$'),
78 | use: loader
79 | })
80 | }
81 |
82 | return output
83 | }
84 |
85 | exports.createNotifierCallback = () => {
86 | const notifier = require('node-notifier')
87 |
88 | return (severity, errors) => {
89 | if (severity !== 'error') return
90 |
91 | const error = errors[0]
92 | const filename = error.file && error.file.split('!').pop()
93 |
94 | notifier.notify({
95 | title: packageConfig.name,
96 | message: severity + ': ' + error.name,
97 | subtitle: filename || '',
98 | icon: path.join(__dirname, 'logo.png')
99 | })
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const config = require('../config')
4 | const isProduction = process.env.NODE_ENV === 'production'
5 | const sourceMapEnabled = isProduction
6 | ? config.build.productionSourceMap
7 | : config.dev.cssSourceMap
8 |
9 | module.exports = {
10 | loaders: utils.cssLoaders({
11 | sourceMap: sourceMapEnabled,
12 | extract: isProduction
13 | }),
14 | cssSourceMap: sourceMapEnabled,
15 | cacheBusting: config.dev.cacheBusting,
16 | transformToRequire: {
17 | video: ['src', 'poster'],
18 | source: 'src',
19 | img: 'src',
20 | image: 'xlink:href'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/build/webpack.base.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const config = require('../config')
5 | const vueLoaderConfig = require('./vue-loader.conf')
6 |
7 | function resolve (dir) {
8 | return path.join(__dirname, '..', dir)
9 | }
10 |
11 | const createLintingRule = () => ({
12 | test: /\.(js|vue)$/,
13 | loader: 'eslint-loader',
14 | enforce: 'pre',
15 | include: [resolve('src'), resolve('test')],
16 | options: {
17 | formatter: require('eslint-friendly-formatter'),
18 | emitWarning: !config.dev.showEslintErrorsInOverlay
19 | }
20 | })
21 |
22 | module.exports = {
23 | context: path.resolve(__dirname, '../'),
24 | entry: {
25 | app: './src/main.js'
26 | },
27 | output: {
28 | path: config.build.assetsRoot,
29 | filename: '[name].js',
30 | publicPath: process.env.NODE_ENV === 'production'
31 | ? config.build.assetsPublicPath
32 | : config.dev.assetsPublicPath
33 | },
34 | resolve: {
35 | extensions: ['.js', '.vue', '.json'],
36 | alias: {
37 | 'vue$': 'vue/dist/vue.esm.js',
38 | '@': resolve('src'),
39 | }
40 | },
41 | module: {
42 | rules: [
43 | ...(config.dev.useEslint ? [createLintingRule()] : []),
44 | {
45 | test: /\.vue$/,
46 | loader: 'vue-loader',
47 | options: vueLoaderConfig
48 | },
49 | {
50 | test: /\.js$/,
51 | loader: 'babel-loader',
52 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
53 | },
54 | {
55 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
56 | loader: 'url-loader',
57 | options: {
58 | limit: 10000,
59 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
60 | }
61 | },
62 | {
63 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
64 | loader: 'url-loader',
65 | options: {
66 | limit: 10000,
67 | name: utils.assetsPath('media/[name].[hash:7].[ext]')
68 | }
69 | },
70 | {
71 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
72 | loader: 'url-loader',
73 | options: {
74 | limit: 10000,
75 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
76 | }
77 | }
78 | ]
79 | },
80 | node: {
81 | // prevent webpack from injecting useless setImmediate polyfill because Vue
82 | // source contains it (although only uses it if it's native).
83 | setImmediate: false,
84 | // prevent webpack from injecting mocks to Node native modules
85 | // that does not make sense for the client
86 | dgram: 'empty',
87 | fs: 'empty',
88 | net: 'empty',
89 | tls: 'empty',
90 | child_process: 'empty'
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const webpack = require('webpack')
4 | const config = require('../config')
5 | const merge = require('webpack-merge')
6 | const path = require('path')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11 | const portfinder = require('portfinder')
12 |
13 | const HOST = process.env.HOST
14 | const PORT = process.env.PORT && Number(process.env.PORT)
15 |
16 | const devWebpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
19 | },
20 | // cheap-module-eval-source-map is faster for development
21 | devtool: config.dev.devtool,
22 |
23 | // these devServer options should be customized in /config/index.js
24 | devServer: {
25 | clientLogLevel: 'warning',
26 | historyApiFallback: {
27 | rewrites: [
28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
29 | ],
30 | },
31 | hot: true,
32 | contentBase: false, // since we use CopyWebpackPlugin.
33 | compress: true,
34 | host: HOST || config.dev.host,
35 | port: PORT || config.dev.port,
36 | open: config.dev.autoOpenBrowser,
37 | overlay: config.dev.errorOverlay
38 | ? { warnings: false, errors: true }
39 | : false,
40 | publicPath: config.dev.assetsPublicPath,
41 | proxy: config.dev.proxyTable,
42 | quiet: true, // necessary for FriendlyErrorsPlugin
43 | watchOptions: {
44 | poll: config.dev.poll,
45 | }
46 | },
47 | plugins: [
48 | new webpack.DefinePlugin({
49 | 'process.env': require('../config/dev.env')
50 | }),
51 | new webpack.HotModuleReplacementPlugin(),
52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
53 | new webpack.NoEmitOnErrorsPlugin(),
54 | // https://github.com/ampedandwired/html-webpack-plugin
55 | new HtmlWebpackPlugin({
56 | filename: 'index.html',
57 | template: 'index.html',
58 | inject: true
59 | }),
60 | // copy custom static assets
61 | new CopyWebpackPlugin([
62 | {
63 | from: path.resolve(__dirname, '../static'),
64 | to: config.dev.assetsSubDirectory,
65 | ignore: ['.*']
66 | }
67 | ])
68 | ]
69 | })
70 |
71 | module.exports = new Promise((resolve, reject) => {
72 | portfinder.basePort = process.env.PORT || config.dev.port
73 | portfinder.getPort((err, port) => {
74 | if (err) {
75 | reject(err)
76 | } else {
77 | // publish the new Port, necessary for e2e tests
78 | process.env.PORT = port
79 | // add port to devServer config
80 | devWebpackConfig.devServer.port = port
81 |
82 | // Add FriendlyErrorsPlugin
83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
84 | compilationSuccessInfo: {
85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
86 | },
87 | onErrors: config.dev.notifyOnErrors
88 | ? utils.createNotifierCallback()
89 | : undefined
90 | }))
91 |
92 | resolve(devWebpackConfig)
93 | }
94 | })
95 | })
96 |
--------------------------------------------------------------------------------
/build/webpack.prod.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const webpack = require('webpack')
5 | const config = require('../config')
6 | const merge = require('webpack-merge')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13 |
14 | const env = require('../config/prod.env')
15 |
16 | const webpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({
19 | sourceMap: config.build.productionSourceMap,
20 | extract: true,
21 | usePostCSS: true
22 | })
23 | },
24 | devtool: config.build.productionSourceMap ? config.build.devtool : false,
25 | output: {
26 | path: config.build.assetsRoot,
27 | filename: utils.assetsPath('js/[name].[chunkhash].js'),
28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
29 | },
30 | plugins: [
31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html
32 | new webpack.DefinePlugin({
33 | 'process.env': env
34 | }),
35 | new UglifyJsPlugin({
36 | uglifyOptions: {
37 | compress: {
38 | warnings: false
39 | }
40 | },
41 | sourceMap: config.build.productionSourceMap,
42 | parallel: true
43 | }),
44 | // extract css into its own file
45 | new ExtractTextPlugin({
46 | filename: utils.assetsPath('css/[name].[contenthash].css'),
47 | // Setting the following option to `false` will not extract CSS from codesplit chunks.
48 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
49 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
50 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
51 | allChunks: true,
52 | }),
53 | // Compress extracted CSS. We are using this plugin so that possible
54 | // duplicated CSS from different components can be deduped.
55 | new OptimizeCSSPlugin({
56 | cssProcessorOptions: config.build.productionSourceMap
57 | ? { safe: true, map: { inline: false } }
58 | : { safe: true }
59 | }),
60 | // generate dist index.html with correct asset hash for caching.
61 | // you can customize output by editing /index.html
62 | // see https://github.com/ampedandwired/html-webpack-plugin
63 | new HtmlWebpackPlugin({
64 | filename: config.build.index,
65 | template: 'index.html',
66 | inject: true,
67 | minify: {
68 | removeComments: true,
69 | collapseWhitespace: true,
70 | removeAttributeQuotes: true
71 | // more options:
72 | // https://github.com/kangax/html-minifier#options-quick-reference
73 | },
74 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin
75 | chunksSortMode: 'dependency'
76 | }),
77 | // keep module.id stable when vendor modules does not change
78 | new webpack.HashedModuleIdsPlugin(),
79 | // enable scope hoisting
80 | new webpack.optimize.ModuleConcatenationPlugin(),
81 | // split vendor js into its own file
82 | new webpack.optimize.CommonsChunkPlugin({
83 | name: 'vendor',
84 | minChunks (module) {
85 | // any required modules inside node_modules are extracted to vendor
86 | return (
87 | module.resource &&
88 | /\.js$/.test(module.resource) &&
89 | module.resource.indexOf(
90 | path.join(__dirname, '../node_modules')
91 | ) === 0
92 | )
93 | }
94 | }),
95 | // extract webpack runtime and module manifest to its own file in order to
96 | // prevent vendor hash from being updated whenever app bundle is updated
97 | new webpack.optimize.CommonsChunkPlugin({
98 | name: 'manifest',
99 | minChunks: Infinity
100 | }),
101 | // This instance extracts shared chunks from code splitted chunks and bundles them
102 | // in a separate chunk, similar to the vendor chunk
103 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
104 | new webpack.optimize.CommonsChunkPlugin({
105 | name: 'app',
106 | async: 'vendor-async',
107 | children: true,
108 | minChunks: 3
109 | }),
110 |
111 | // copy custom static assets
112 | new CopyWebpackPlugin([
113 | {
114 | from: path.resolve(__dirname, '../static'),
115 | to: config.build.assetsSubDirectory,
116 | ignore: ['.*']
117 | }
118 | ])
119 | ]
120 | })
121 |
122 | if (config.build.productionGzip) {
123 | const CompressionWebpackPlugin = require('compression-webpack-plugin')
124 |
125 | webpackConfig.plugins.push(
126 | new CompressionWebpackPlugin({
127 | asset: '[path].gz[query]',
128 | algorithm: 'gzip',
129 | test: new RegExp(
130 | '\\.(' +
131 | config.build.productionGzipExtensions.join('|') +
132 | ')$'
133 | ),
134 | threshold: 10240,
135 | minRatio: 0.8
136 | })
137 | )
138 | }
139 |
140 | if (config.build.bundleAnalyzerReport) {
141 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
142 | webpackConfig.plugins.push(new BundleAnalyzerPlugin())
143 | }
144 |
145 | module.exports = webpackConfig
146 |
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.3.1
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {}, // vue设置的代理,用以解决 跨域 问题
14 |
15 | // Various Dev Server settings
16 | host: 'localhost', // can be overwritten by process.env.HOST
17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
18 | autoOpenBrowser: true,
19 | errorOverlay: true,
20 | notifyOnErrors: true,
21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
22 |
23 | // Use Eslint Loader?
24 | // If true, your code will be linted during bundling and
25 | // linting errors and warnings will be shown in the console.
26 | useEslint: true,
27 | // If true, eslint errors and warnings will also be shown in the error overlay
28 | // in the browser.
29 | showEslintErrorsInOverlay: false,
30 |
31 | /**
32 | * Source Maps
33 | */
34 |
35 | // https://webpack.js.org/configuration/devtool/#development
36 | devtool: 'cheap-module-eval-source-map',
37 |
38 | // If you have problems debugging vue-files in devtools,
39 | // set this to false - it *may* help
40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
41 | cacheBusting: true,
42 |
43 | cssSourceMap: true
44 | },
45 |
46 | build: {
47 | // Template for index.html
48 | index: path.resolve(__dirname, '../dist/index.html'),
49 |
50 | // Paths
51 | assetsRoot: path.resolve(__dirname, '../dist'),
52 | assetsSubDirectory: 'static',
53 | assetsPublicPath: '', //为空 防止static前面加入"/"
54 |
55 | /**
56 | * Source Maps
57 | */
58 |
59 | productionSourceMap: true,
60 | // https://webpack.js.org/configuration/devtool/#production
61 | devtool: '#source-map',
62 |
63 | // Gzip off by default as many popular static hosts such as
64 | // Surge or Netlify already gzip all static assets for you.
65 | // Before setting to `true`, make sure to:
66 | // npm install --save-dev compression-webpack-plugin@1.1.11 (2.x报错)
67 | productionGzip: true,
68 | productionGzipExtensions: ['js', 'css'],
69 |
70 | // Run the build command with an extra argument to
71 | // View the bundle analyzer report after build finishes:
72 | // `npm run build --report`
73 | // Set to `true` or `false` to always turn it on or off
74 | bundleAnalyzerReport: process.env.npm_config_report
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
h-blog | by haibao
--------------------------------------------------------------------------------
/dist/static/css/app.9b21055ce9c6856f3c8acd23a25f953b.css.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/dist/static/css/app.9b21055ce9c6856f3c8acd23a25f953b.css.gz
--------------------------------------------------------------------------------
/dist/static/fonts/element-icons.6f0a763.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/dist/static/fonts/element-icons.6f0a763.ttf
--------------------------------------------------------------------------------
/dist/static/img/logo.fd80e1d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/dist/static/img/logo.fd80e1d.jpg
--------------------------------------------------------------------------------
/dist/static/js/0.3a9aa42a329f9b43d8d8.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([0],{"4GjL":function(t,e,a){t.exports=a.p+"static/img/logo.fd80e1d.jpg"},"4ako":function(t,e){},"N9/t":function(t,e,a){"use strict";var n={name:"Aside",data:function(){return{title:"博客标题",blogUrl:"http://www.hehaibao.com/",solgan:"不忘初心,砥砺前行",logo:a("4GjL"),navs:[{text:"首页",link:"/"},{text:"登录",link:"/login"},{text:"注册",link:"/register"},{text:"效果演示",link:"/demo"},{text:"凑数而已",link:"/undefined"}]}},methods:{emit:function(){this.$emit("showmsg","hello world")}}},s={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"h"},[a("el-aside",{staticClass:"aside h",attrs:{width:"200px"}},[a("a",{attrs:{target:"_blank",href:t.blogUrl}},[a("img",{staticClass:"logo",attrs:{src:t.logo,alt:""}}),t._v(" "),a("h1",[t._v(t._s(t.title))])]),t._v(" "),a("p",{staticClass:"solgan"},[t._v(t._s(t.solgan))]),t._v(" "),a("ul",t._l(t.navs,function(e){return a("li",{key:e.text},[a("router-link",{attrs:{to:e.link}},[t._v(t._s(e.text))])],1)})),t._v(" "),a("p",{staticClass:"test-btn",on:{click:t.emit}},[a("a",{attrs:{href:"javascript:;"}},[t._v("父子组件通信测试,点我查看")])])])],1)},staticRenderFns:[]};var i=a("VU/8")(n,s,!1,function(t){a("4ako")},"data-v-5c236406",null);e.a=i.exports},e9bX:function(t,e){},mzkE:function(t,e,a){"use strict";var n={render:function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"footer"},[this._v("\n copyright by haibao 2018(http://www.hehaibao.com/)\n")])},staticRenderFns:[]};var s=a("VU/8")({name:"Foot"},n,!1,function(t){a("e9bX")},"data-v-90694156",null);e.a=s.exports}});
2 | //# sourceMappingURL=0.3a9aa42a329f9b43d8d8.js.map
--------------------------------------------------------------------------------
/dist/static/js/0.3a9aa42a329f9b43d8d8.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///./src/assets/images/logo.jpg","webpack:///src/components/aside.vue","webpack:///./src/components/aside.vue?2345","webpack:///./src/components/aside.vue","webpack:///src/components/footer.vue","webpack:///./src/components/footer.vue?25b5","webpack:///./src/components/footer.vue"],"names":["module","exports","__webpack_require__","p","aside","name","data","title","blogUrl","solgan","logo","navs","text","link","methods","emit","this","$emit","components_aside","render","_vm","_h","$createElement","_c","_self","staticClass","attrs","width","target","href","src","alt","_v","_s","_l","nav","key","to","on","click","staticRenderFns","Component","normalizeComponent","ssrContext","__webpack_exports__","components_footer"],"mappings":"yCAAAA,EAAAC,QAAAC,EAAAC,EAAA,0FCmBA,IAAAC,GACAC,KAAA,QACAC,KAFA,WAGA,OACAC,MAAA,OACAC,QAAA,2BACAC,OAAA,YACAC,KAAAR,EAAA,QACAS,OAEAC,KAAA,KACAC,KAAA,MAGAD,KAAA,KACAC,KAAA,WAGAD,KAAA,KACAC,KAAA,cAGAD,KAAA,OACAC,KAAA,UAGAD,KAAA,OACAC,KAAA,iBAKAC,SACAC,KADA,WAEAC,KAAAC,MAAA,4BClDAC,GADiBC,OAFjB,WAA0B,IAAAC,EAAAJ,KAAaK,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,YAAA,MAAgBF,EAAA,YAAiBE,YAAA,UAAAC,OAA6BC,MAAA,WAAiBJ,EAAA,KAAUG,OAAOE,OAAA,SAAAC,KAAAT,EAAAZ,WAAsCe,EAAA,OAAYE,YAAA,OAAAC,OAA0BI,IAAAV,EAAAV,KAAAqB,IAAA,MAAyBX,EAAAY,GAAA,KAAAT,EAAA,MAAAH,EAAAY,GAAAZ,EAAAa,GAAAb,EAAAb,YAAAa,EAAAY,GAAA,KAAAT,EAAA,KAAyEE,YAAA,WAAqBL,EAAAY,GAAAZ,EAAAa,GAAAb,EAAAX,WAAAW,EAAAY,GAAA,KAAAT,EAAA,KAAAH,EAAAc,GAAAd,EAAA,cAAAe,GAAmF,OAAAZ,EAAA,MAAgBa,IAAAD,EAAAvB,OAAaW,EAAA,eAAoBG,OAAOW,GAAAF,EAAAtB,QAAeO,EAAAY,GAAAZ,EAAAa,GAAAE,EAAAvB,UAAA,MAAiCQ,EAAAY,GAAA,KAAAT,EAAA,KAAuBE,YAAA,WAAAa,IAA2BC,MAAAnB,EAAAL,QAAkBQ,EAAA,KAAUG,OAAOG,KAAA,kBAAuBT,EAAAY,GAAA,4BAEnqBQ,oBCCjB,IAcAC,EAdAvC,EAAA,OAcAwC,CACAtC,EACAc,GATA,EAVA,SAAAyB,GACAzC,EAAA,SAaA,kBAEA,MAUA0C,EAAA,EAAAH,EAAA,gECnBA,ICJAI,GADiB1B,OAFjB,WAA0B,IAAaE,EAAbL,KAAaM,eAAkD,OAA/DN,KAAuCQ,MAAAD,IAAAF,GAAwB,OAAiBI,YAAA,WAAhFT,KAAqGgB,GAAA,iEAE9GQ,oBCCjB,IAcAC,EAdAvC,EAAA,OAcAwC,EFTArC,KAAA,QEWAwC,GATA,EAVA,SAAAF,GACAzC,EAAA,SAaA,kBAEA,MAUA0C,EAAA,EAAAH,EAAA","file":"static/js/0.3a9aa42a329f9b43d8d8.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/img/logo.fd80e1d.jpg\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/images/logo.jpg\n// module id = 4GjL\n// module chunks = 0","\n \n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/aside.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"h\"},[_c('el-aside',{staticClass:\"aside h\",attrs:{\"width\":\"200px\"}},[_c('a',{attrs:{\"target\":\"_blank\",\"href\":_vm.blogUrl}},[_c('img',{staticClass:\"logo\",attrs:{\"src\":_vm.logo,\"alt\":\"\"}}),_vm._v(\" \"),_c('h1',[_vm._v(_vm._s(_vm.title))])]),_vm._v(\" \"),_c('p',{staticClass:\"solgan\"},[_vm._v(_vm._s(_vm.solgan))]),_vm._v(\" \"),_c('ul',_vm._l((_vm.navs),function(nav){return _c('li',{key:nav.text},[_c('router-link',{attrs:{\"to\":nav.link}},[_vm._v(_vm._s(nav.text))])],1)})),_vm._v(\" \"),_c('p',{staticClass:\"test-btn\",on:{\"click\":_vm.emit}},[_c('a',{attrs:{\"href\":\"javascript:;\"}},[_vm._v(\"父子组件通信测试,点我查看\")])])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5c236406\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/aside.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5c236406\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./aside.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./aside.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./aside.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5c236406\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./aside.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-5c236406\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/aside.vue\n// module id = null\n// module chunks = ","\n \n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/footer.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"footer\"},[_vm._v(\"\\n copyright by haibao 2018(http://www.hehaibao.com/)\\n\")])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-90694156\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/footer.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-90694156\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./footer.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./footer.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./footer.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-90694156\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./footer.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-90694156\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/footer.vue\n// module id = null\n// module chunks = "],"sourceRoot":""}
--------------------------------------------------------------------------------
/dist/static/js/1.4820c59af53e9840bc88.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/dist/static/js/1.4820c59af53e9840bc88.js.gz
--------------------------------------------------------------------------------
/dist/static/js/2.34a849fc09a8134d7c4a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/dist/static/js/2.34a849fc09a8134d7c4a.js.gz
--------------------------------------------------------------------------------
/dist/static/js/3.9bfee001cf87b62d6d89.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([3],{"4GD7":function(e,o){},QlWu:function(e,o,t){"use strict";Object.defineProperty(o,"__esModule",{value:!0});var r=t("mvHQ"),n=t.n(r),i={name:"Login",data:function(){return{isLogin:!1,loginForm:{username:"",password:"",checked:!1},rules:{username:[{required:!0,message:"请输入用户名"}],password:[{required:!0,message:"请输入密码"}]}}},mounted:function(){this.isLogin=function(e){if(e)return window.sessionStorage.getItem(e)}("isLogin")},methods:{onSubmit:function(e){var o=this;this.$refs[e].validate(function(e){if(!e)return!1;var t,r;r=!0,(t="isLogin")&&("string"!=typeof r&&(r=n()(r)),window.sessionStorage.setItem(t,r)),o.loginForm.username="",o.loginForm.password="",o.$router.push({path:"/"})})}}},s={render:function(){var e=this,o=e.$createElement,t=e._self._c||o;return t("div",[e.isLogin?e._e():t("el-form",{ref:"loginForm",staticClass:"login-form",attrs:{model:e.loginForm,"status-icon":"",rules:e.rules,"label-width":"80px"}},[t("h2",[e._v("用户登录")]),e._v(" "),t("el-form-item",{attrs:{label:"用户名",prop:"username"}},[t("el-input",{model:{value:e.loginForm.username,callback:function(o){e.$set(e.loginForm,"username",o)},expression:"loginForm.username"}})],1),e._v(" "),t("el-form-item",{attrs:{label:"密码",prop:"password"}},[t("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:e.loginForm.password,callback:function(o){e.$set(e.loginForm,"password",o)},expression:"loginForm.password"}})],1),e._v(" "),t("el-form-item",[t("el-checkbox",{model:{value:e.loginForm.checked,callback:function(o){e.$set(e.loginForm,"checked",o)},expression:"loginForm.checked"}},[e._v("记住密码")])],1),e._v(" "),t("el-form-item",[t("el-button",{attrs:{type:"primary"},on:{click:function(o){e.onSubmit("loginForm")}}},[e._v("登录")]),e._v(" "),t("router-link",{attrs:{to:"/register"}},[e._v("还没有账号?去注册")]),e._v(" | "),t("router-link",{attrs:{to:"/"}},[e._v("返回首页")])],1)],1),e._v(" "),e.isLogin?t("el-card",{staticClass:"box-card"},[t("div",{staticClass:"text item"},[e._v("\n Hi, 欢迎回来!当前状态:已登录\n "),t("p",[t("router-link",{attrs:{to:"/"}},[e._v("回到首页")])],1)])]):e._e()],1)},staticRenderFns:[]};var a=t("VU/8")(i,s,!1,function(e){t("4GD7")},"data-v-b5cd49f2",null);o.default=a.exports},mvHQ:function(e,o,t){e.exports={default:t("qkKv"),__esModule:!0}},qkKv:function(e,o,t){var r=t("FeBl"),n=r.JSON||(r.JSON={stringify:JSON.stringify});e.exports=function(e){return n.stringify.apply(n,arguments)}}});
2 | //# sourceMappingURL=3.9bfee001cf87b62d6d89.js.map
--------------------------------------------------------------------------------
/dist/static/js/3.9bfee001cf87b62d6d89.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///src/pages/login/login.vue","webpack:///./src/utils/mUtils.js","webpack:///./src/pages/login/login.vue?564b","webpack:///./src/pages/login/login.vue","webpack:///./node_modules/babel-runtime/core-js/json/stringify.js","webpack:///./node_modules/core-js/library/fn/json/stringify.js"],"names":["login","name","data","isLogin","loginForm","username","password","checked","rules","required","message","mounted","this","window","sessionStorage","getItem","getStore","methods","onSubmit","formName","_this","$refs","validate","valid","content","stringify_default","setItem","$router","push","path","login_login","render","_vm","_h","$createElement","_c","_self","_e","ref","staticClass","attrs","model","status-icon","label-width","_v","label","prop","value","callback","$$v","$set","expression","type","auto-complete","on","click","$event","to","staticRenderFns","Component","__webpack_require__","normalizeComponent","ssrContext","__webpack_exports__","module","exports","default","__esModule","core","$JSON","JSON","stringify","it","apply","arguments"],"mappings":"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","file":"static/js/3.9bfee001cf87b62d6d89.js","sourcesContent":["\n \n \n
\n 用户登录
\n \n \n \n \n \n \n \n 记住密码\n \n \n 登录\n 还没有账号?去注册 | 返回首页\n \n \n\n \n
\n \n Hi, 欢迎回来!当前状态:已登录\n
回到首页
\n
\n \n
\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/pages/login/login.vue","/**\n * 常用工具\n * update at 2018-08-13 by haibao\n */\n\n/**\n * 存储sessionStorage\n */\nexport const setStore = (name, content) => {\n if (!name) return\n if (typeof content !== 'string') {\n content = JSON.stringify(content)\n }\n window.sessionStorage.setItem(name, content)\n}\n\n/**\n * 获取sessionStorage\n */\nexport const getStore = name => {\n if (!name) return\n return window.sessionStorage.getItem(name)\n}\n\n/**\n * 删除sessionStorage\n */\nexport const removeStore = name => {\n if (!name) return\n window.sessionStorage.removeItem(name)\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/mUtils.js","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.isLogin)?_c('el-form',{ref:\"loginForm\",staticClass:\"login-form\",attrs:{\"model\":_vm.loginForm,\"status-icon\":\"\",\"rules\":_vm.rules,\"label-width\":\"80px\"}},[_c('h2',[_vm._v(\"用户登录\")]),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"用户名\",\"prop\":\"username\"}},[_c('el-input',{model:{value:(_vm.loginForm.username),callback:function ($$v) {_vm.$set(_vm.loginForm, \"username\", $$v)},expression:\"loginForm.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"密码\",\"prop\":\"password\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.loginForm.password),callback:function ($$v) {_vm.$set(_vm.loginForm, \"password\", $$v)},expression:\"loginForm.password\"}})],1),_vm._v(\" \"),_c('el-form-item',[_c('el-checkbox',{model:{value:(_vm.loginForm.checked),callback:function ($$v) {_vm.$set(_vm.loginForm, \"checked\", $$v)},expression:\"loginForm.checked\"}},[_vm._v(\"记住密码\")])],1),_vm._v(\" \"),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){_vm.onSubmit('loginForm')}}},[_vm._v(\"登录\")]),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":\"/register\"}},[_vm._v(\"还没有账号?去注册\")]),_vm._v(\" | \"),_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"返回首页\")])],1)],1):_vm._e(),_vm._v(\" \"),(_vm.isLogin)?_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_vm._v(\"\\n Hi, 欢迎回来!当前状态:已登录\\n \"),_c('p',[_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"回到首页\")])],1)])]):_vm._e()],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-b5cd49f2\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/pages/login/login.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-b5cd49f2\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./login.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./login.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./login.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-b5cd49f2\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./login.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-b5cd49f2\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pages/login/login.vue\n// module id = null\n// module chunks = ","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/core-js/json/stringify.js\n// module id = mvHQ\n// module chunks = 3","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/fn/json/stringify.js\n// module id = qkKv\n// module chunks = 3"],"sourceRoot":""}
--------------------------------------------------------------------------------
/dist/static/js/4.63b0c96043a372cc3690.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([4],{"/1AV":function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=i("N9/t"),s=i("mzkE"),n={name:"Demo",data:function(){return{msg:"",filterTest:"hello world",fullscreenLoading:!1,centerDialogVisible:!1}},components:{leftSide:o.a,foot:s.a},directives:{txtDemo:function(t,e){t.style.color=e.value.color,t.style.fontSize=e.value.fontsize}},filters:{filterA:function(t){return t?(t=t.toString()).toUpperCase():""}},computed:{count:function(){return this.$store.state.count}},methods:{loading:function(){var t=this;this.fullscreenLoading=!0,setTimeout(function(){t.fullscreenLoading=!1},2e3)},toast:function(){this.$message.error("测试消息")},messageBox:function(){this.$alert("你好","提示",{confirmButtonText:"确定",callback:function(t){alert("回调")}})},notification:function(){var t=this.$createElement;this.$notify({title:"您有一条消息",message:t("i",{style:"color: teal"},"恭喜你中奖了,哈哈哈")})},dialog:function(){this.centerDialogVisible=!0},test:function(){alert("todo")},getcomponentmsg:function(t){alert("我在效果演示页-----"+t)}}},a={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"home h"},[i("el-container",{staticClass:"h"},[i("left-side",{attrs:{msg:t.msg},on:{showmsg:t.getcomponentmsg}}),t._v(" "),i("el-main",[i("div",{staticClass:"breadcrumb"},[i("el-breadcrumb",{attrs:{separator:"/"}},[i("el-breadcrumb-item",{attrs:{to:{path:"/"}}},[t._v("首页")]),t._v(" "),i("el-breadcrumb-item",[t._v("效果演示")])],1)],1),t._v(" "),i("div",{staticClass:"content"},[i("h2",{staticClass:"title"},[t._v("elementUI demos")]),t._v(" "),i("div",{staticClass:"demos"},[i("a",{directives:[{name:"loading",rawName:"v-loading.fullscreen.lock",value:t.fullscreenLoading,expression:"fullscreenLoading",modifiers:{fullscreen:!0,lock:!0}}],attrs:{href:"javascript:;"},on:{click:t.loading}},[t._v("loading")]),t._v(" "),i("a",{attrs:{href:"javascript:;"},on:{click:t.toast}},[t._v("toast")]),t._v(" "),i("a",{attrs:{href:"javascript:;"},on:{click:t.messageBox}},[t._v("messageBox")]),t._v(" "),i("a",{attrs:{href:"javascript:;"},on:{click:t.notification}},[t._v("notification")]),t._v(" "),i("a",{attrs:{href:"javascript:;"},on:{click:t.dialog}},[t._v("dialog")])]),t._v(" "),i("h2",{staticClass:"title"},[t._v("my demos")]),t._v(" "),i("div",{staticClass:"demos"},[i("a",{directives:[{name:"txtDemo",rawName:"v-txtDemo",value:{color:"red",fontsize:"18px"},expression:"{ color: 'red', fontsize: '18px' }"}]},[t._v("指令 - 让我变红")]),t._v(" "),i("a",[t._v(t._s(t._f("filterA")(t.filterTest))+" - 过滤 - 小写变大写")])]),t._v(" "),i("h2",{staticClass:"title"},[t._v("vuex demo")]),t._v(" "),i("div",{staticClass:"demos"},[i("p",[t._v("当前数量:"+t._s(t.count))]),t._v(" "),i("div",[i("button",{on:{click:function(e){t.$store.commit("add")}}},[t._v("加1")]),t._v(" "),i("button",{on:{click:function(e){t.$store.commit("diff")}}},[t._v("减1")]),t._v(" "),i("button",{on:{click:function(e){t.$store.dispatch("asyncAdd")}}},[t._v("异步加1")]),t._v(" "),i("button",{on:{click:function(e){t.$store.dispatch("asyncDiff")}}},[t._v("异步减1")])])])]),t._v(" "),i("foot")],1)],1),t._v(" "),i("el-dialog",{attrs:{title:"提示",visible:t.centerDialogVisible,width:"30%",center:""},on:{"update:visible":function(e){t.centerDialogVisible=e}}},[i("span",[t._v("需要注意的是内容是默认不居中的")]),t._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(e){t.centerDialogVisible=!1}}},[t._v("取 消")]),t._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(e){t.centerDialogVisible=!1}}},[t._v("确 定")])],1)])],1)},staticRenderFns:[]};var c=i("VU/8")(n,a,!1,function(t){i("NjRI")},"data-v-96ad09b8",null);e.default=c.exports},NjRI:function(t,e){}});
2 | //# sourceMappingURL=4.63b0c96043a372cc3690.js.map
--------------------------------------------------------------------------------
/dist/static/js/4.63b0c96043a372cc3690.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///src/pages/demo/index.vue","webpack:///./src/pages/demo/index.vue?103a","webpack:///./src/pages/demo/index.vue"],"names":["demo","name","data","msg","filterTest","fullscreenLoading","centerDialogVisible","components","leftSide","aside","foot","footer","directives","txtDemo","el","binding","style","color","value","fontSize","fontsize","filters","filterA","toString","toUpperCase","computed","count","this","$store","state","methods","loading","_this","setTimeout","toast","$message","error","messageBox","$alert","confirmButtonText","callback","action","alert","notification","h","$createElement","$notify","title","message","dialog","test","getcomponentmsg","pages_demo","render","_vm","_h","_c","_self","staticClass","attrs","on","showmsg","_v","separator","to","path","rawName","expression","modifiers","fullscreen","lock","href","click","_s","_f","$event","commit","dispatch","visible","width","center","update:visible","slot","type","staticRenderFns","Component","__webpack_require__","normalizeComponent","ssrContext","__webpack_exports__"],"mappings":"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","file":"static/js/4.63b0c96043a372cc3690.js","sourcesContent":["\n \n
\n \n \n \n \n 首页\n 效果演示\n \n
\n\n \n
elementUI demos
\n
\n
my demos
\n
\n
vuex demo
\n
\n
当前数量:{{ count }}
\n
\n \n \n \n \n
\n
\n
\n \n \n \n\n
\n 需要注意的是内容是默认不居中的\n \n \n
\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/pages/demo/index.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"home h\"},[_c('el-container',{staticClass:\"h\"},[_c('left-side',{attrs:{\"msg\":_vm.msg},on:{\"showmsg\":_vm.getcomponentmsg}}),_vm._v(\" \"),_c('el-main',[_c('div',{staticClass:\"breadcrumb\"},[_c('el-breadcrumb',{attrs:{\"separator\":\"/\"}},[_c('el-breadcrumb-item',{attrs:{\"to\":{ path: '/' }}},[_vm._v(\"首页\")]),_vm._v(\" \"),_c('el-breadcrumb-item',[_vm._v(\"效果演示\")])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('h2',{staticClass:\"title\"},[_vm._v(\"elementUI demos\")]),_vm._v(\" \"),_c('div',{staticClass:\"demos\"},[_c('a',{directives:[{name:\"loading\",rawName:\"v-loading.fullscreen.lock\",value:(_vm.fullscreenLoading),expression:\"fullscreenLoading\",modifiers:{\"fullscreen\":true,\"lock\":true}}],attrs:{\"href\":\"javascript:;\"},on:{\"click\":_vm.loading}},[_vm._v(\"loading\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"javascript:;\"},on:{\"click\":_vm.toast}},[_vm._v(\"toast\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"javascript:;\"},on:{\"click\":_vm.messageBox}},[_vm._v(\"messageBox\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"javascript:;\"},on:{\"click\":_vm.notification}},[_vm._v(\"notification\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"javascript:;\"},on:{\"click\":_vm.dialog}},[_vm._v(\"dialog\")])]),_vm._v(\" \"),_c('h2',{staticClass:\"title\"},[_vm._v(\"my demos\")]),_vm._v(\" \"),_c('div',{staticClass:\"demos\"},[_c('a',{directives:[{name:\"txtDemo\",rawName:\"v-txtDemo\",value:({ color: 'red', fontsize: '18px' }),expression:\"{ color: 'red', fontsize: '18px' }\"}]},[_vm._v(\"指令 - 让我变红\")]),_vm._v(\" \"),_c('a',[_vm._v(_vm._s(_vm._f(\"filterA\")(_vm.filterTest))+\" - 过滤 - 小写变大写\")])]),_vm._v(\" \"),_c('h2',{staticClass:\"title\"},[_vm._v(\"vuex demo\")]),_vm._v(\" \"),_c('div',{staticClass:\"demos\"},[_c('p',[_vm._v(\"当前数量:\"+_vm._s(_vm.count))]),_vm._v(\" \"),_c('div',[_c('button',{on:{\"click\":function($event){_vm.$store.commit('add')}}},[_vm._v(\"加1\")]),_vm._v(\" \"),_c('button',{on:{\"click\":function($event){_vm.$store.commit('diff')}}},[_vm._v(\"减1\")]),_vm._v(\" \"),_c('button',{on:{\"click\":function($event){_vm.$store.dispatch('asyncAdd')}}},[_vm._v(\"异步加1\")]),_vm._v(\" \"),_c('button',{on:{\"click\":function($event){_vm.$store.dispatch('asyncDiff')}}},[_vm._v(\"异步减1\")])])])]),_vm._v(\" \"),_c('foot')],1)],1),_vm._v(\" \"),_c('el-dialog',{attrs:{\"title\":\"提示\",\"visible\":_vm.centerDialogVisible,\"width\":\"30%\",\"center\":\"\"},on:{\"update:visible\":function($event){_vm.centerDialogVisible=$event}}},[_c('span',[_vm._v(\"需要注意的是内容是默认不居中的\")]),_vm._v(\" \"),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":function($event){_vm.centerDialogVisible = false}}},[_vm._v(\"取 消\")]),_vm._v(\" \"),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){_vm.centerDialogVisible = false}}},[_vm._v(\"确 定\")])],1)])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-96ad09b8\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/pages/demo/index.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-96ad09b8\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-96ad09b8\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-96ad09b8\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pages/demo/index.vue\n// module id = null\n// module chunks = "],"sourceRoot":""}
--------------------------------------------------------------------------------
/dist/static/js/5.d1d7303e40cf7949eead.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([5],{"8zp9":function(r,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t={name:"Register",data:function(){var r=this;return{regForm:{username:"",password:"",password_confirm:"",email:""},rules:{username:[{required:!0,message:"请输入用户名"}],password:[{required:!0,validator:function(e,o,t){""===o?t(new Error("请输入密码")):(""!==r.regForm.password_confirm&&r.$refs.regForm.validateField("password_confirm"),t())}}],password_confirm:[{required:!0,validator:function(e,o,t){""===o?t(new Error("请再次输入密码")):o!==r.regForm.password?t(new Error("两次输入密码不一致!")):t()}}],email:[{required:!0,message:"请输入常用的邮箱"},{type:"email",message:"请输入正确的邮箱地址",trigger:["blur","change"]}]}}},methods:{onSubmit:function(r){this.$refs[r].validate(function(r){if(!r)return!1;alert("submit!")})}}},s={render:function(){var r=this,e=r.$createElement,o=r._self._c||e;return o("div",[o("el-form",{ref:"regForm",staticClass:"reg-form",attrs:{model:r.regForm,"status-icon":"",rules:r.rules,"label-width":"80px"}},[o("h2",[r._v("用户注册")]),r._v(" "),o("el-form-item",{attrs:{label:"用户名",prop:"username"}},[o("el-input",{model:{value:r.regForm.username,callback:function(e){r.$set(r.regForm,"username",e)},expression:"regForm.username"}})],1),r._v(" "),o("el-form-item",{attrs:{label:"密码",prop:"password"}},[o("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:r.regForm.password,callback:function(e){r.$set(r.regForm,"password",e)},expression:"regForm.password"}})],1),r._v(" "),o("el-form-item",{attrs:{label:"确认密码",prop:"password_confirm"}},[o("el-input",{attrs:{type:"password","auto-complete":"off"},model:{value:r.regForm.password_confirm,callback:function(e){r.$set(r.regForm,"password_confirm",e)},expression:"regForm.password_confirm"}})],1),r._v(" "),o("el-form-item",{attrs:{label:"邮箱",prop:"email"}},[o("el-input",{model:{value:r.regForm.email,callback:function(e){r.$set(r.regForm,"email",e)},expression:"regForm.email"}})],1),r._v(" "),o("el-form-item",[o("el-button",{attrs:{type:"primary"},on:{click:function(e){r.onSubmit("regForm")}}},[r._v("注册")]),r._v(" "),o("router-link",{attrs:{to:"/login"}},[r._v("已有账号?去登录")]),r._v(" | "),o("router-link",{attrs:{to:"/"}},[r._v("返回首页")])],1)],1)],1)},staticRenderFns:[]};var a=o("VU/8")(t,s,!1,function(r){o("I8no")},"data-v-6426f0d5",null);e.default=a.exports},I8no:function(r,e){}});
2 | //# sourceMappingURL=5.d1d7303e40cf7949eead.js.map
--------------------------------------------------------------------------------
/dist/static/js/5.d1d7303e40cf7949eead.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///src/pages/login/register.vue","webpack:///./src/pages/login/register.vue?d02a","webpack:///./src/pages/login/register.vue"],"names":["register","name","data","_this","this","regForm","username","password","password_confirm","email","rules","required","message","validator","rule","value","callback","Error","$refs","validateField","type","trigger","methods","onSubmit","formName","validate","valid","alert","login_register","render","_vm","_h","$createElement","_c","_self","ref","staticClass","attrs","model","status-icon","label-width","_v","label","prop","$$v","$set","expression","auto-complete","on","click","$event","to","staticRenderFns","Component","__webpack_require__","normalizeComponent","ssrContext","__webpack_exports__"],"mappings":"uGAyBA,IAAAA,GACAC,KAAA,WACAC,KAFA,WAEA,IAAAC,EAAAC,KAoBA,OACAC,SACAC,SAAA,GACAC,SAAA,GACAC,iBAAA,GACAC,MAAA,IAEAC,OACAJ,WACAK,UAAA,EAAAC,QAAA,WAEAL,WACAI,UAAA,EAAAE,UA/BA,SAAAC,EAAAC,EAAAC,GACA,KAAAD,EACAC,EAAA,IAAAC,MAAA,WAEA,KAAAd,EAAAE,QAAAG,kBACAL,EAAAe,MAAAb,QAAAc,cAAA,oBAEAH,QA0BAR,mBACAG,UAAA,EAAAE,UAxBA,SAAAC,EAAAC,EAAAC,GACA,KAAAD,EACAC,EAAA,IAAAC,MAAA,YACAF,IAAAZ,EAAAE,QAAAE,SACAS,EAAA,IAAAC,MAAA,eAEAD,OAoBAP,QACAE,UAAA,EAAAC,QAAA,aACAQ,KAAA,QAAAR,QAAA,aAAAS,SAAA,sBAKAC,SACAC,SADA,SACAC,GACApB,KAAAc,MAAAM,GAAAC,SAAA,SAAAC,GACA,IAAAA,EAOA,SAJAC,MAAA,gBC1EAC,GADiBC,OAFjB,WAA0B,IAAAC,EAAA1B,KAAa2B,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAAA,EAAA,WAA+BE,IAAA,UAAAC,YAAA,WAAAC,OAA4CC,MAAAR,EAAAzB,QAAAkC,cAAA,GAAA7B,MAAAoB,EAAApB,MAAA8B,cAAA,UAA6EP,EAAA,MAAAH,EAAAW,GAAA,UAAAX,EAAAW,GAAA,KAAAR,EAAA,gBAA2DI,OAAOK,MAAA,MAAAC,KAAA,cAAiCV,EAAA,YAAiBK,OAAOvB,MAAAe,EAAAzB,QAAA,SAAAW,SAAA,SAAA4B,GAAsDd,EAAAe,KAAAf,EAAAzB,QAAA,WAAAuC,IAAuCE,WAAA,uBAAgC,GAAAhB,EAAAW,GAAA,KAAAR,EAAA,gBAAqCI,OAAOK,MAAA,KAAAC,KAAA,cAAgCV,EAAA,YAAiBI,OAAOjB,KAAA,WAAA2B,gBAAA,OAAwCT,OAAQvB,MAAAe,EAAAzB,QAAA,SAAAW,SAAA,SAAA4B,GAAsDd,EAAAe,KAAAf,EAAAzB,QAAA,WAAAuC,IAAuCE,WAAA,uBAAgC,GAAAhB,EAAAW,GAAA,KAAAR,EAAA,gBAAqCI,OAAOK,MAAA,OAAAC,KAAA,sBAA0CV,EAAA,YAAiBI,OAAOjB,KAAA,WAAA2B,gBAAA,OAAwCT,OAAQvB,MAAAe,EAAAzB,QAAA,iBAAAW,SAAA,SAAA4B,GAA8Dd,EAAAe,KAAAf,EAAAzB,QAAA,mBAAAuC,IAA+CE,WAAA,+BAAwC,GAAAhB,EAAAW,GAAA,KAAAR,EAAA,gBAAqCI,OAAOK,MAAA,KAAAC,KAAA,WAA6BV,EAAA,YAAiBK,OAAOvB,MAAAe,EAAAzB,QAAA,MAAAW,SAAA,SAAA4B,GAAmDd,EAAAe,KAAAf,EAAAzB,QAAA,QAAAuC,IAAoCE,WAAA,oBAA6B,GAAAhB,EAAAW,GAAA,KAAAR,EAAA,gBAAAA,EAAA,aAAqDI,OAAOjB,KAAA,WAAiB4B,IAAKC,MAAA,SAAAC,GAAyBpB,EAAAP,SAAA,eAA0BO,EAAAW,GAAA,QAAAX,EAAAW,GAAA,KAAAR,EAAA,eAA+CI,OAAOc,GAAA,YAAerB,EAAAW,GAAA,cAAAX,EAAAW,GAAA,OAAAR,EAAA,eAAuDI,OAAOc,GAAA,OAAUrB,EAAAW,GAAA,uBAEngDW,oBCCjB,IAcAC,EAdAC,EAAA,OAcAC,CACAvD,EACA4B,GATA,EAVA,SAAA4B,GACAF,EAAA,SAaA,kBAEA,MAUAG,EAAA,QAAAJ,EAAA","file":"static/js/5.d1d7303e40cf7949eead.js","sourcesContent":["\n \n \n 用户注册
\n \n \n \n \n \n \n \n \n \n \n \n \n \n 注册\n 已有账号?去登录 | 返回首页\n \n \n
\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/pages/login/register.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"regForm\",staticClass:\"reg-form\",attrs:{\"model\":_vm.regForm,\"status-icon\":\"\",\"rules\":_vm.rules,\"label-width\":\"80px\"}},[_c('h2',[_vm._v(\"用户注册\")]),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"用户名\",\"prop\":\"username\"}},[_c('el-input',{model:{value:(_vm.regForm.username),callback:function ($$v) {_vm.$set(_vm.regForm, \"username\", $$v)},expression:\"regForm.username\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"密码\",\"prop\":\"password\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.regForm.password),callback:function ($$v) {_vm.$set(_vm.regForm, \"password\", $$v)},expression:\"regForm.password\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"确认密码\",\"prop\":\"password_confirm\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"auto-complete\":\"off\"},model:{value:(_vm.regForm.password_confirm),callback:function ($$v) {_vm.$set(_vm.regForm, \"password_confirm\", $$v)},expression:\"regForm.password_confirm\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"邮箱\",\"prop\":\"email\"}},[_c('el-input',{model:{value:(_vm.regForm.email),callback:function ($$v) {_vm.$set(_vm.regForm, \"email\", $$v)},expression:\"regForm.email\"}})],1),_vm._v(\" \"),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){_vm.onSubmit('regForm')}}},[_vm._v(\"注册\")]),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":\"/login\"}},[_vm._v(\"已有账号?去登录\")]),_vm._v(\" | \"),_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"返回首页\")])],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-6426f0d5\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/pages/login/register.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-6426f0d5\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./register.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./register.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./register.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6426f0d5\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./register.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-6426f0d5\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pages/login/register.vue\n// module id = null\n// module chunks = "],"sourceRoot":""}
--------------------------------------------------------------------------------
/dist/static/js/app.2fb34aa4ce1edba4a0b5.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([7],{NHnr:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n("7+uW"),o=(n("Qbok"),n("zL8q")),u=n.n(o),a=(n("tvR6"),{render:function(){var e=this.$createElement,t=this._self._c||e;return t("div",{attrs:{id:"app"}},[t("keep-alive",[t("transition",{attrs:{name:"router-fade",mode:"out-in"}},[this.$route.meta.keepAlive?t("router-view"):this._e()],1)],1),this._v(" "),t("transition",{attrs:{name:"router-fade",mode:"out-in"}},[this.$route.meta.keepAlive?this._e():t("router-view")],1)],1)},staticRenderFns:[]});var r=n("VU/8")({name:"App"},a,!1,function(e){n("p2vH")},null,null).exports,l=n("//Fk"),m=n.n(l),c=n("/ocq");i.default.use(c.a);var s=[{path:"",component:function(){return Promise.all([n.e(0),n.e(1)]).then(n.bind(null,"FP3a"))},meta:{title:"博客首页"}},{path:"/detail/:id",name:"Detail",component:function(){return Promise.all([n.e(0),n.e(2)]).then(n.bind(null,"WDDs"))},meta:{title:"文章详情页",keepAlive:!0}},{path:"/login",component:function(){return n.e(3).then(n.bind(null,"QlWu"))},meta:{title:"登录"}},{path:"/register",component:function(){return n.e(5).then(n.bind(null,"8zp9"))},meta:{title:"注册"}},{path:"/demo",component:function(){return Promise.all([n.e(0),n.e(4)]).then(n.bind(null,"/1AV"))},meta:{title:"效果演示页",keepAlive:!0}}],d=new c.a({routes:s,scrollBehavior:function(e,t,n){return n&&e.meta.keepAlive?n:new m.a(function(e){setTimeout(function(){e({x:0,y:0})},0)})}});d.beforeEach(function(e,t,n){window.document.title=e.meta.title,0===e.matched.length?t.name?n({name:t.name}):n("/"):n()});var f=d,p=n("NYxO"),v={actions:{asyncAdd:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{num:1}).num;setTimeout(function(){e.commit("add",{num:t})},1e3)},asyncDiff:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{num:1}).num;setTimeout(function(){e.commit("diff",{num:t})},1e3)}},mutations:{add:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{num:1}).num;e.count+=t},diff:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{num:1}).num;e.count-=t}},state:{count:0}};i.default.use(p.a);var h=new p.a.Store(v);i.default.config.productionTip=!1,i.default.use(u.a),new i.default({el:"#app",router:f,store:h,components:{App:r},template:""})},Qbok:function(e,t){},p2vH:function(e,t){},tvR6:function(e,t){}},["NHnr"]);
2 | //# sourceMappingURL=app.2fb34aa4ce1edba4a0b5.js.map
--------------------------------------------------------------------------------
/dist/static/js/app.2fb34aa4ce1edba4a0b5.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///./src/App.vue?d5af","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///./src/router/index.js","webpack:///./src/store/index.js","webpack:///./src/store/action.js","webpack:///./src/store/mutation.js","webpack:///./src/store/state.js","webpack:///./src/main.js"],"names":["selectortype_template_index_0_src_App","render","_h","this","$createElement","_c","_self","attrs","id","name","mode","$route","meta","_e","_v","keepAlive","staticRenderFns","src_App","__webpack_require__","normalizeComponent","ssrContext","vue_esm","use","vue_router_esm","routes","path","component","Promise","all","e","then","bind","title","router","scrollBehavior","to","from","savedPosition","promise_default","a","resolve","setTimeout","x","y","beforeEach","next","window","document","matched","length","src_router","store","actions","asyncAdd","num","arguments","undefined","commit","asyncDiff","mutations","add","state","count","diff","vuex_esm","main_store","Store","config","productionTip","element_ui_common_default","el","components","App","template"],"mappings":"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","file":"static/js/app.2fb34aa4ce1edba4a0b5.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('keep-alive',[_c('transition',{attrs:{\"name\":\"router-fade\",\"mode\":\"out-in\"}},[(_vm.$route.meta.keepAlive)?_c('router-view'):_vm._e()],1)],1),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"router-fade\",\"mode\":\"out-in\"}},[(!_vm.$route.meta.keepAlive)?_c('router-view'):_vm._e()],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-92825894\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-92825894\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-92825894\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","\n \n \n \n \n \n \n\n \n \n \n
\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","import Vue from 'vue'\nimport Router from 'vue-router'\n\nVue.use(Router)\n\n// 路由配置\nconst routes = [\n { path: '', component: () => import(/* webpackChunkName: \"home\" */'@/pages/home/index'), meta: { title: '博客首页' } },\n { path: '/detail/:id', name: 'Detail', component: () => import(/* webpackChunkName: \"Detail\" */'@/pages/post/single'), meta: { title: '文章详情页', keepAlive: true } },\n { path: '/login', component: () => import(/* webpackChunkName: \"login\" */'@/pages/login/login'), meta: { title: '登录' } },\n { path: '/register', component: () => import(/* webpackChunkName: \"register\" */'@/pages/login/register'), meta: { title: '注册' } },\n { path: '/demo', component: () => import(/* webpackChunkName: \"demo\" */'@/pages/demo/index'), meta: { title: '效果演示页', keepAlive: true } }\n]\n\n// 创建Vue Router实例\nconst router = new Router({\n // mode: \"history\",\n routes,\n scrollBehavior (to, from, savedPosition) {\n // return 期望滚动到哪个的位置 keep-alive 返回缓存页面后记录浏览位置\n if (savedPosition && to.meta.keepAlive) {\n return savedPosition\n }\n // 异步滚动操作\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({ x: 0, y: 0 })\n }, 0)\n })\n }\n})\n\n/**\n * 路由 前置守卫\n * @param to: 即将要进入的目标 路由对象\n * @param from: 当前导航正要离开的路由\n * @param next: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。\n */\nrouter.beforeEach((to, from, next) => {\n window.document.title = to.meta.title // 修改浏览器标题\n // 这里也可以做是否登录的验证\n if (to.matched.length === 0) { // 如果未匹配到路由\n from.name ? next({ name: from.name }) : next('/') // 如果上级也未匹配到路由则跳转登录页面,如果上级能匹配到则转上级路由\n } else {\n next() // 如果匹配到正确跳转\n }\n})\n\nexport default router\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","import actions from './action.js'\nimport mutations from './mutation.js'\nimport state from './state.js'\n\nexport default {\n actions,\n mutations,\n state\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/index.js","export default {\n // 异步 1秒之后加1\n asyncAdd (store, { num } = { num: 1 }) {\n setTimeout(() => {\n store.commit('add', { num })\n }, 1000)\n },\n // 异步 1秒之后减1\n asyncDiff (store, { num } = { num: 1 }) {\n setTimeout(() => {\n store.commit('diff', { num })\n }, 1000)\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/action.js","export default {\n add (state, { num } = { num: 1 }) {\n state.count += num\n },\n diff (state, { num } = { num: 1 }) {\n state.count -= num\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/mutation.js","let count = 0\nexport default {\n count\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/state.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport '@/assets/css/base.css'\nimport ElementUI from 'element-ui'\nimport 'element-ui/lib/theme-chalk/index.css'\nimport App from './App'\nimport router from './router'\nimport Vuex from 'vuex'\nimport Store from '@/store/index.js'\n\nVue.use(Vuex)\nlet store = new Vuex.Store(Store)\n\nVue.config.productionTip = false\n\nVue.use(ElementUI)\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n store,\n components: { App },\n template: ''\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""}
--------------------------------------------------------------------------------
/dist/static/js/manifest.edd1a25d37861aeb8ac9.js:
--------------------------------------------------------------------------------
1 | !function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var i,u,f,s=0,d=[];s
2 |
3 |
4 |
5 |
6 | h-blog | by haibao
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "h-blog",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "hehaibao ",
6 | "private": true,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "lint": "eslint --ext .js,.vue src",
11 | "build": "node build/build.js"
12 | },
13 | "dependencies": {
14 | "element-ui": "^2.4.5",
15 | "vue": "^2.5.2",
16 | "vue-router": "^3.0.1"
17 | },
18 | "devDependencies": {
19 | "autoprefixer": "^7.1.2",
20 | "axios": "^0.18.0",
21 | "babel-core": "^6.22.1",
22 | "babel-eslint": "^8.2.1",
23 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
24 | "babel-loader": "^7.1.1",
25 | "babel-plugin-syntax-jsx": "^6.18.0",
26 | "babel-plugin-transform-runtime": "^6.22.0",
27 | "babel-plugin-transform-vue-jsx": "^3.5.0",
28 | "babel-preset-env": "^1.3.2",
29 | "babel-preset-stage-2": "^6.22.0",
30 | "chalk": "^2.0.1",
31 | "compression-webpack-plugin": "^1.1.11",
32 | "copy-webpack-plugin": "^4.0.1",
33 | "css-loader": "^0.28.0",
34 | "eslint": "^4.15.0",
35 | "eslint-config-standard": "^10.2.1",
36 | "eslint-friendly-formatter": "^3.0.0",
37 | "eslint-loader": "^1.7.1",
38 | "eslint-plugin-import": "^2.7.0",
39 | "eslint-plugin-node": "^5.2.0",
40 | "eslint-plugin-promise": "^3.4.0",
41 | "eslint-plugin-standard": "^3.0.1",
42 | "eslint-plugin-vue": "^4.0.0",
43 | "extract-text-webpack-plugin": "^3.0.0",
44 | "file-loader": "^1.1.4",
45 | "friendly-errors-webpack-plugin": "^1.6.1",
46 | "html-webpack-plugin": "^2.30.1",
47 | "less": "^3.8.1",
48 | "less-loader": "^4.1.0",
49 | "mockjs": "^1.0.1-beta3",
50 | "node-notifier": "^5.1.2",
51 | "optimize-css-assets-webpack-plugin": "^3.2.0",
52 | "ora": "^1.2.0",
53 | "portfinder": "^1.0.13",
54 | "postcss-import": "^11.0.0",
55 | "postcss-loader": "^2.0.8",
56 | "postcss-url": "^7.2.1",
57 | "rimraf": "^2.6.0",
58 | "semver": "^5.3.0",
59 | "shelljs": "^0.7.6",
60 | "uglifyjs-webpack-plugin": "^1.1.1",
61 | "url-loader": "^1.0.1",
62 | "vue-codemirror": "^4.0.5",
63 | "vue-loader": "^13.3.0",
64 | "vue-style-loader": "^3.0.1",
65 | "vue-template-compiler": "^2.5.2",
66 | "vuex": "^3.0.1",
67 | "webpack": "^3.6.0",
68 | "webpack-bundle-analyzer": "^2.9.0",
69 | "webpack-dev-server": "^2.9.1",
70 | "webpack-merge": "^4.1.0"
71 | },
72 | "engines": {
73 | "node": ">= 6.0.0",
74 | "npm": ">= 3.0.0"
75 | },
76 | "browserslist": [
77 | "> 1%",
78 | "last 2 versions",
79 | "not ie <= 8"
80 | ]
81 | }
82 |
--------------------------------------------------------------------------------
/screenshots/detail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/screenshots/detail.jpg
--------------------------------------------------------------------------------
/screenshots/home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/screenshots/home.jpg
--------------------------------------------------------------------------------
/screenshots/login.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/screenshots/login.jpg
--------------------------------------------------------------------------------
/screenshots/register.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/screenshots/register.jpg
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
32 |
--------------------------------------------------------------------------------
/src/assets/css/base.css:
--------------------------------------------------------------------------------
1 | /**
2 | ** 基础样式
3 | */
4 | body, ul, h1, h2 {margin: 0;padding: 0}
5 | html, body {font-size: 14px;font-family: Arial, Helvetica, sans-serif;line-height: 1;height: 100%}
6 | li {list-style: none}
7 | a {text-decoration: none;color: #666}
8 |
9 | .h {height: 100%}
--------------------------------------------------------------------------------
/src/assets/images/login_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/src/assets/images/login_bg.jpg
--------------------------------------------------------------------------------
/src/assets/images/logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/src/assets/images/logo.jpg
--------------------------------------------------------------------------------
/src/common/api.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 存放接口
3 | */
--------------------------------------------------------------------------------
/src/common/mockdata.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mockjs 模拟数据
3 | */
4 | import Mock from 'mockjs'
5 |
6 | const Random = Mock.Random
7 |
8 | // 模拟首页-最新文章列表
9 | const newsList = Mock.mock('newsList', getNewsList)
10 |
11 | function getNewsList () {
12 | let lists = []
13 |
14 | for (let i = 0; i < 10; i++) {
15 | let tmpArr = {
16 | id: Random.increment(),
17 | title: Random.ctitle(10, 30), // Random.csentence( min, max )
18 | desc: Random.cparagraph(1, 3),
19 | date: Random.date('yyyy-MM-dd'),
20 | tags: Random.range(3)
21 | }
22 | lists.push(tmpArr)
23 | }
24 |
25 | return {
26 | total: 100,
27 | lists: lists
28 | }
29 | }
30 |
31 | // 模拟首页-热评文章列表
32 | const hotList = Mock.mock('hotList', getHotList)
33 |
34 | function getHotList () {
35 | let lists = []
36 |
37 | for (let i = 0; i < 5; i++) {
38 | let tmpArr = {
39 | id: Random.increment(),
40 | title: Random.ctitle(10, 20)
41 | }
42 | lists.push(tmpArr)
43 | }
44 |
45 | return {
46 | lists: lists
47 | }
48 | }
49 |
50 | // 模拟首页-标签列表
51 | const tagsList = Mock.mock('tagsList', getTagsList)
52 |
53 | function getTagsList () {
54 | let lists = []
55 |
56 | for (let i = 0; i < 50; i++) {
57 | let tmpArr = {
58 | id: Random.increment(),
59 | text: Random.word(4, 8),
60 | color: Random.color()
61 | }
62 | lists.push(tmpArr)
63 | }
64 |
65 | return {
66 | lists: lists
67 | }
68 | }
69 |
70 | export { newsList, hotList, tagsList }
71 |
--------------------------------------------------------------------------------
/src/components/aside.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
59 |
60 |
105 |
--------------------------------------------------------------------------------
/src/components/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue'
4 | import '@/assets/css/base.css'
5 | import ElementUI from 'element-ui'
6 | import 'element-ui/lib/theme-chalk/index.css'
7 | import App from './App'
8 | import router from './router'
9 | import Vuex from 'vuex'
10 | import Store from '@/store/index.js'
11 |
12 | Vue.use(Vuex)
13 | let store = new Vuex.Store(Store)
14 |
15 | Vue.config.productionTip = false
16 |
17 | Vue.use(ElementUI)
18 |
19 | /* eslint-disable no-new */
20 | new Vue({
21 | el: '#app',
22 | router,
23 | store,
24 | components: { App },
25 | template: ''
26 | })
27 |
--------------------------------------------------------------------------------
/src/pages/demo/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 首页
9 | 效果演示
10 |
11 |
12 |
13 |
14 |
elementUI demos
15 |
22 |
my demos
23 |
27 |
vuex demo
28 |
29 |
当前数量:{{ count }}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
components
38 |
39 |
40 |
41 | !!!!! 我是额外的slot内容
42 |
43 |
44 |
45 |
46 |
47 |
48 |
53 | 需要注意的是内容是默认不居中的
54 |
58 |
59 |
60 |
61 |
62 |
157 |
158 |
177 |
--------------------------------------------------------------------------------
/src/pages/home/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{ item }}
11 |
12 |
13 |
14 |
15 |
最新文章
16 |
26 |
27 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
43 |
44 |
45 |
46 |
47 |
热评文章
48 |
49 | - {{ hot.title }}
50 |
51 |
52 |
53 |
热门标签
54 |
55 | {{ tag.text }}
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
130 |
131 |
219 |
--------------------------------------------------------------------------------
/src/pages/login/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 用户登录
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 记住密码
14 |
15 |
16 | 登录
17 | 还没有账号?去注册 | 返回首页
18 |
19 |
20 |
21 |
22 |
23 |
24 | Hi, 欢迎回来!当前状态:已登录
25 |
回到首页
26 |
27 |
28 |
29 |
30 |
31 |
76 |
77 |
90 |
--------------------------------------------------------------------------------
/src/pages/login/register.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 用户注册
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 注册
19 | 已有账号?去登录 | 返回首页
20 |
21 |
22 |
23 |
24 |
25 |
89 |
90 |
103 |
--------------------------------------------------------------------------------
/src/pages/post/single.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 首页
9 | 文章
10 | 正文
11 |
12 |
13 |
14 |
15 |
{{ title }}
16 |
17 | 作者:{{ author }}
18 | 发布日期:{{ publishDate }}
19 | 浏览量:{{ viewCount }}
20 |
21 |
22 |
23 |
此处展示一下codemirror代码编辑器
24 |
25 |
26 |
27 |
30 |
31 |
32 |
33 | 点赞(10)
34 | 打赏
35 |
36 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
164 |
165 |
187 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 |
4 | Vue.use(Router)
5 |
6 | // 路由配置
7 | const routes = [
8 | { path: '', component: () => import(/* webpackChunkName: "home" */'@/pages/home/index'), meta: { title: '博客首页' } },
9 | { path: '/detail/:id', name: 'Detail', component: () => import(/* webpackChunkName: "Detail" */'@/pages/post/single'), meta: { title: '文章详情页', keepAlive: true } },
10 | { path: '/login', component: () => import(/* webpackChunkName: "login" */'@/pages/login/login'), meta: { title: '登录' } },
11 | { path: '/register', component: () => import(/* webpackChunkName: "register" */'@/pages/login/register'), meta: { title: '注册' } },
12 | { path: '/demo', component: () => import(/* webpackChunkName: "demo" */'@/pages/demo/index'), meta: { title: '效果演示页', keepAlive: true } }
13 | ]
14 |
15 | // 创建Vue Router实例
16 | const router = new Router({
17 | // mode: "history",
18 | routes,
19 | scrollBehavior (to, from, savedPosition) {
20 | // return 期望滚动到哪个的位置 keep-alive 返回缓存页面后记录浏览位置
21 | if (savedPosition && to.meta.keepAlive) {
22 | return savedPosition
23 | }
24 | // 异步滚动操作
25 | return new Promise((resolve) => {
26 | setTimeout(() => {
27 | resolve({ x: 0, y: 0 })
28 | }, 0)
29 | })
30 | }
31 | })
32 |
33 | /**
34 | * 路由 前置守卫
35 | * @param to: 即将要进入的目标 路由对象
36 | * @param from: 当前导航正要离开的路由
37 | * @param next: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
38 | */
39 | router.beforeEach((to, from, next) => {
40 | window.document.title = to.meta.title // 修改浏览器标题
41 | // 这里也可以做是否登录的验证
42 | if (to.matched.length === 0) { // 如果未匹配到路由
43 | from.name ? next({ name: from.name }) : next('/') // 如果上级也未匹配到路由则跳转登录页面,如果上级能匹配到则转上级路由
44 | } else {
45 | next() // 如果匹配到正确跳转
46 | }
47 | })
48 |
49 | export default router
50 |
--------------------------------------------------------------------------------
/src/store/action.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 异步
3 | */
4 | export default {
5 | // 异步 1秒之后加1
6 | asyncAdd (store, { num } = { num: 1 }) {
7 | setTimeout(() => {
8 | store.commit('add', { num })
9 | }, 1000)
10 | },
11 | // 异步 1秒之后减1
12 | asyncDiff (store, { num } = { num: 1 }) {
13 | setTimeout(() => {
14 | store.commit('diff', { num })
15 | }, 1000)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import actions from './action.js'
2 | import mutations from './mutation.js'
3 | import state from './state.js'
4 |
5 | export default {
6 | actions,
7 | mutations,
8 | state
9 | }
10 |
--------------------------------------------------------------------------------
/src/store/mutation.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 同步
3 | */
4 | export default {
5 | add (state, { num } = { num: 1 }) {
6 | state.count += num
7 | },
8 | diff (state, { num } = { num: 1 }) {
9 | state.count -= num
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/store/state.js:
--------------------------------------------------------------------------------
1 | let count = 0
2 | export default {
3 | count
4 | }
5 |
--------------------------------------------------------------------------------
/src/utils/env.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 配置开发环境和线上环境之间的切换
3 | *
4 | * baseUrl: 域名地址
5 | * imgBaseUrl: 图片所在域名地址
6 | *
7 | */
8 |
9 | let baseUrl = ''
10 | let imgBaseUrl = ''
11 |
12 | if (process.env.NODE_ENV == 'development') { // 开发环境
13 | baseUrl = 'http://localhost:8080/'
14 | imgBaseUrl = baseUrl + 'assets/images'
15 | }else if (process.env.NODE_ENV == 'production') { // 线上环境
16 | baseUrl = 'http://demo.com/';//TODO: 替换域名
17 | imgBaseUrl = baseUrl + 'static/img'
18 | }
19 |
20 | export {
21 | baseUrl,
22 | imgBaseUrl
23 | }
--------------------------------------------------------------------------------
/src/utils/fetch.js:
--------------------------------------------------------------------------------
1 | import { baseUrl } from './env'
2 |
3 | export default async(url = '', data = {}, type = 'GET', method = 'fetch') => {
4 | type = type.toUpperCase()
5 | url = baseUrl + url
6 |
7 | if (type == 'GET') {
8 | let dataStr = '' //数据拼接字符串
9 | Object.keys(data).forEach(key => {
10 | dataStr += key + '=' + data[key] + '&'
11 | })
12 |
13 | if (dataStr !== '') {
14 | dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'))
15 | url = url + '?' + dataStr
16 | }
17 | }
18 |
19 | if (window.fetch && method == 'fetch') {
20 | let requestConfig = {
21 | credentials: 'include',
22 | method: type,
23 | headers: {
24 | 'Accept': 'application/json',
25 | 'Content-Type': 'application/json'
26 | },
27 | mode: "cors",
28 | cache: "force-cache"
29 | }
30 |
31 | if (type == 'POST') {
32 | Object.defineProperty(requestConfig, 'body', {
33 | value: JSON.stringify(data)
34 | })
35 | }
36 |
37 | try {
38 | const response = await fetch(url, requestConfig)
39 | const responseJson = await response.json()
40 | return responseJson
41 | } catch (error) {
42 | throw new Error(error)
43 | }
44 | } else {
45 | return new Promise((resolve, reject) => {
46 | let requestObj
47 | if (window.XMLHttpRequest) {
48 | requestObj = new XMLHttpRequest()
49 | } else {
50 | requestObj = new ActiveXObject
51 | }
52 |
53 | let sendData = ''
54 | if (type == 'POST') {
55 | sendData = JSON.stringify(data)
56 | }
57 |
58 | requestObj.open(type, url, true)
59 | requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
60 | requestObj.send(sendData)
61 |
62 | requestObj.onreadystatechange = () => {
63 | if (requestObj.readyState == 4) {
64 | if (requestObj.status == 200) {
65 | let obj = requestObj.response
66 | if (typeof obj !== 'object') {
67 | obj = JSON.parse(obj)
68 | }
69 | resolve(obj)
70 | } else {
71 | reject(requestObj)
72 | }
73 | }
74 | }
75 | })
76 | }
77 | }
--------------------------------------------------------------------------------
/src/utils/mUtils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 常用工具
3 | * update at 2018-08-13 by haibao
4 | */
5 |
6 | /**
7 | * 存储sessionStorage
8 | */
9 | export const setStore = (name, content) => {
10 | if (!name) return
11 | if (typeof content !== 'string') {
12 | content = JSON.stringify(content)
13 | }
14 | window.sessionStorage.setItem(name, content)
15 | }
16 |
17 | /**
18 | * 获取sessionStorage
19 | */
20 | export const getStore = name => {
21 | if (!name) return
22 | return window.sessionStorage.getItem(name)
23 | }
24 |
25 | /**
26 | * 删除sessionStorage
27 | */
28 | export const removeStore = name => {
29 | if (!name) return
30 | window.sessionStorage.removeItem(name)
31 | }
32 |
--------------------------------------------------------------------------------
/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hehaibao/h-blog/4e25b12b70913967b834781da37a604abf952f67/static/.gitkeep
--------------------------------------------------------------------------------
说点什么
38 |