Commit 3faad008 3faad0086627afcbe59d60605289380df31a126c by zhanghao

commit

0 parents
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 }
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
1 .DS_Store
2 node_modules/
3 /dist/
4 npm-debug.log*
5 yarn-debug.log*
6 yarn-error.log*
7
8 # Editor directories and files
9 .idea
10 .vscode
11 *.suo
12 *.ntvs*
13 *.njsproj
14 *.sln
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 }
1 # br-client
2
3 > A Vue.js project
4
5 ## Build Setup
6
7 ``` bash
8 # install dependencies
9 npm install
10
11 # serve with hot reload at localhost:8080
12 npm run dev
13
14 # build for production with minification
15 npm run build
16
17 # build for production and view the bundle analyzer report
18 npm run build --report
19 ```
20
21 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).
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 })
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 }
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 }
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 }
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
12
13 module.exports = {
14 context: path.resolve(__dirname, '../'),
15 entry: {
16 app: './src/main.js'
17 },
18 output: {
19 path: config.build.assetsRoot,
20 filename: '[name].js',
21 publicPath: process.env.NODE_ENV === 'production'
22 ? config.build.assetsPublicPath
23 : config.dev.assetsPublicPath
24 },
25 resolve: {
26 extensions: ['.js', '.vue', '.json'],
27 alias: {
28 'vue$': 'vue/dist/vue.esm.js',
29 '@': resolve('src'),
30 }
31 },
32 module: {
33 rules: [
34 {
35 test: /\.vue$/,
36 loader: 'vue-loader',
37 options: vueLoaderConfig
38 },
39 {
40 test: /\.js$/,
41 loader: 'babel-loader',
42 include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
43 },
44 {
45 test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
46 loader: 'url-loader',
47 options: {
48 limit: 10000,
49 name: utils.assetsPath('img/[name].[hash:7].[ext]')
50 }
51 },
52 {
53 test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
54 loader: 'url-loader',
55 options: {
56 limit: 10000,
57 name: utils.assetsPath('media/[name].[hash:7].[ext]')
58 }
59 },
60 {
61 test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
62 loader: 'url-loader',
63 options: {
64 limit: 10000,
65 name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
66 }
67 }
68 ]
69 },
70 node: {
71 // prevent webpack from injecting useless setImmediate polyfill because Vue
72 // source contains it (although only uses it if it's native).
73 setImmediate: false,
74 // prevent webpack from injecting mocks to Node native modules
75 // that does not make sense for the client
76 dgram: 'empty',
77 fs: 'empty',
78 net: 'empty',
79 tls: 'empty',
80 child_process: 'empty'
81 }
82 }
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 })
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
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 })
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: {},
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: false,
19 errorOverlay: true,
20 notifyOnErrors: true,
21 poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
22
23
24 /**
25 * Source Maps
26 */
27
28 // https://webpack.js.org/configuration/devtool/#development
29 devtool: 'cheap-module-eval-source-map',
30
31 // If you have problems debugging vue-files in devtools,
32 // set this to false - it *may* help
33 // https://vue-loader.vuejs.org/en/options.html#cachebusting
34 cacheBusting: true,
35
36 cssSourceMap: true
37 },
38
39 build: {
40 // Template for index.html
41 index: path.resolve(__dirname, '../dist/index.html'),
42
43 // Paths
44 assetsRoot: path.resolve(__dirname, '../dist'),
45 assetsSubDirectory: 'static',
46 assetsPublicPath: '/',
47
48 /**
49 * Source Maps
50 */
51
52 productionSourceMap: true,
53 // https://webpack.js.org/configuration/devtool/#production
54 devtool: '#source-map',
55
56 // Gzip off by default as many popular static hosts such as
57 // Surge or Netlify already gzip all static assets for you.
58 // Before setting to `true`, make sure to:
59 // npm install --save-dev compression-webpack-plugin
60 productionGzip: false,
61 productionGzipExtensions: ['js', 'css'],
62
63 // Run the build command with an extra argument to
64 // View the bundle analyzer report after build finishes:
65 // `npm run build --report`
66 // Set to `true` or `false` to always turn it on or off
67 bundleAnalyzerReport: process.env.npm_config_report
68 }
69 }
1 'use strict'
2 module.exports = {
3 NODE_ENV: '"production"'
4 }
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width,initial-scale=1.0">
6 <title>br-client</title>
7 </head>
8 <body>
9 <div id="app"></div>
10 <!-- built files will be auto injected -->
11 </body>
12 </html>
This diff could not be displayed because it is too large.
1 {
2 "name": "br-client",
3 "version": "1.0.0",
4 "description": "A Vue.js project",
5 "author": "zhanghao",
6 "private": true,
7 "scripts": {
8 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 "start": "npm run dev",
10 "build": "node build/build.js"
11 },
12 "dependencies": {
13 "axios": "^0.20.0",
14 "element-ui": "^2.13.2",
15 "vue": "^2.5.2",
16 "vue-router": "^3.0.1"
17 },
18 "devDependencies": {
19 "autoprefixer": "^7.1.2",
20 "babel-core": "^6.22.1",
21 "babel-helper-vue-jsx-merge-props": "^2.0.3",
22 "babel-loader": "^7.1.1",
23 "babel-plugin-syntax-jsx": "^6.18.0",
24 "babel-plugin-transform-runtime": "^6.22.0",
25 "babel-plugin-transform-vue-jsx": "^3.5.0",
26 "babel-preset-env": "^1.3.2",
27 "babel-preset-stage-2": "^6.22.0",
28 "chalk": "^2.0.1",
29 "copy-webpack-plugin": "^4.0.1",
30 "css-loader": "^0.28.0",
31 "extract-text-webpack-plugin": "^3.0.0",
32 "file-loader": "^1.1.4",
33 "friendly-errors-webpack-plugin": "^1.6.1",
34 "html-webpack-plugin": "^2.30.1",
35 "node-notifier": "^5.1.2",
36 "optimize-css-assets-webpack-plugin": "^3.2.0",
37 "ora": "^1.2.0",
38 "portfinder": "^1.0.13",
39 "postcss-import": "^11.0.0",
40 "postcss-loader": "^2.0.8",
41 "postcss-url": "^7.2.1",
42 "rimraf": "^2.6.0",
43 "semver": "^5.3.0",
44 "shelljs": "^0.7.6",
45 "uglifyjs-webpack-plugin": "^1.1.1",
46 "url-loader": "^0.5.8",
47 "vue-loader": "^13.3.0",
48 "vue-style-loader": "^3.0.1",
49 "vue-template-compiler": "^2.5.2",
50 "webpack": "^3.6.0",
51 "webpack-bundle-analyzer": "^2.9.0",
52 "webpack-dev-server": "^2.9.1",
53 "webpack-merge": "^4.1.0"
54 },
55 "engines": {
56 "node": ">= 6.0.0",
57 "npm": ">= 3.0.0"
58 },
59 "browserslist": [
60 "> 1%",
61 "last 2 versions",
62 "not ie <= 8"
63 ]
64 }
1 <template>
2 <div id="app">
3 <router-view/>
4 </div>
5 </template>
6
7 <script>
8 export default {
9 name: 'App'
10 }
11 </script>
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 App from './App'
5 import router from './router'
6 import axios from 'axios'
7 import Element from 'element-ui';
8 import 'element-ui/lib/theme-chalk/index.css';
9
10 Vue.config.productionTip = false
11 Vue.prototype.$http = axios
12
13 Vue.use(Element, { size: 'small', zIndex: 3000 });
14
15 /* eslint-disable no-new */
16 new Vue({
17 el: '#app',
18 render: h => h(App),
19 router,
20 components: { App },
21 template: '<App/>'
22 })
1 <template xmlns:el-col="http://www.w3.org/1999/html">
2 <div>
3 <el-row>
4 <el-col :span="8">
5 <el-card class="box-card" shadow="always">
6 <div slot="header" class="clearfix">
7 <span>卡片名称</span>
8 <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
9 </div>
10 <div v-for="o in 4" :key="o" class="text item">
11 {{'列表内容 ' + o }}
12 </div>
13 </el-card>
14 </el-col>
15 <el-col :span="8">
16 <el-card class="box-card" shadow="always">
17 <div slot="header" class="clearfix">
18 <span>卡片名称</span>
19 <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
20 </div>
21 <div v-for="o in 4" :key="o" class="text item">
22 {{'列表内容 ' + o }}
23 </div>
24 </el-card>
25 </el-col>
26 <el-col :span="8">
27 <el-card class="box-card" shadow="always">
28 <div slot="header" class="clearfix">
29 <span>卡片名称</span>
30 <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
31 </div>
32 <div v-for="o in 4" :key="o" class="text item">
33 {{'列表内容 ' + o }}
34 </div>
35 </el-card>
36 </el-col>
37 </el-row>
38 <el-row>
39 <el-col>
40 <el-card class="box-card" shadow="always">
41 <div slot="header" class="clearfix">
42 <span>卡片名称</span>
43 <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
44 </div>
45 <div v-for="o in 4" :key="o" class="text item">
46 {{'列表内容 ' + o }}
47 </div>
48 </el-card>
49 </el-col>
50 </el-row>
51 </div>
52 </template>
53
54 <style>
55 .text {
56 font-size: 14px;
57 }
58
59 .item {
60 margin-bottom: 18px;
61 }
62
63 .clearfix:before,
64 .clearfix:after {
65 display: table;
66 content: "";
67 }
68 .clearfix:after {
69 clear: both
70 }
71
72 .box-card {
73 width: 440px;
74 padding: 0px;
75 background-color: yellowgreen;
76 }
77 </style>
1 import Vue from 'vue'
2 import Router from 'vue-router'
3 import index from '@/page/index'
4
5 Vue.use(Router)
6
7 export default new Router({
8 routes: [
9 {
10 path: '/',
11 meta:{
12 title: '首页'
13 },
14 component: index
15 }
16 ]
17 })
File mode changed