李志伟 3 年前
父节点
当前提交
d20d8bd7c1
共有 23 个文件被更改,包括 3938 次插入3642 次删除
  1. 0
    12
      .babelrc
  2. 0
    10
      .postcssrc.js
  3. 12
    0
      babel.config.js
  4. 0
    41
      build/build.js
  5. 0
    54
      build/check-versions.js
  6. 二进制
      build/logo.png
  7. 0
    101
      build/utils.js
  8. 0
    22
      build/vue-loader.conf.js
  9. 0
    96
      build/webpack.base.conf.js
  10. 0
    95
      build/webpack.dev.conf.js
  11. 0
    145
      build/webpack.prod.conf.js
  12. 0
    7
      config/dev.env.js
  13. 0
    76
      config/index.js
  14. 0
    4
      config/prod.env.js
  15. 0
    11
      index.html
  16. 15
    47
      package.json
  17. 6
    1
      src/App.vue
  18. 67
    0
      src/components/AreaPicker/index.vue
  19. 3
    4
      src/main.js
  20. 9
    5
      src/pages/signup.vue
  21. 0
    0
      static/.gitkeep
  22. 3
    0
      vue.config.js
  23. 3823
    2911
      yarn.lock

+ 0
- 12
.babelrc 查看文件

@@ -1,12 +0,0 @@
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
-}

+ 0
- 10
.postcssrc.js 查看文件

@@ -1,10 +0,0 @@
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
-}

+ 12
- 0
babel.config.js 查看文件

@@ -0,0 +1,12 @@
1
+module.exports = {
2
+  presets: [
3
+    '@vue/cli-plugin-babel/preset'
4
+  ],
5
+  plugins: [
6
+    ['import', {
7
+      libraryName: 'vant',
8
+      libraryDirectory: 'es',
9
+      style: true
10
+    }, 'vant']
11
+  ]
12
+}

+ 0
- 41
build/build.js 查看文件

@@ -1,41 +0,0 @@
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
-})

+ 0
- 54
build/check-versions.js 查看文件

@@ -1,54 +0,0 @@
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
-}

二进制
build/logo.png 查看文件


+ 0
- 101
build/utils.js 查看文件

@@ -1,101 +0,0 @@
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
-}

+ 0
- 22
build/vue-loader.conf.js 查看文件

@@ -1,22 +0,0 @@
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
-}

+ 0
- 96
build/webpack.base.conf.js 查看文件

@@ -1,96 +0,0 @@
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: /\.scss$/,
51
-        loaders: ['style', 'css', 'sass']
52
-      },
53
-      {
54
-        test: /\.js$/,
55
-        loader: 'babel-loader',
56
-        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
57
-      },
58
-      {
59
-        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
60
-        loader: 'url-loader',
61
-        options: {
62
-          limit: 10000,
63
-          name: utils.assetsPath('img/[name].[hash:7].[ext]')
64
-        }
65
-      },
66
-      {
67
-        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
68
-        loader: 'url-loader',
69
-        options: {
70
-          limit: 10000,
71
-          name: utils.assetsPath('media/[name].[hash:7].[ext]')
72
-        }
73
-      },
74
-      {
75
-        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
76
-        loader: 'url-loader',
77
-        options: {
78
-          limit: 10000,
79
-          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
80
-        }
81
-      }
82
-    ]
83
-  },
84
-  node: {
85
-    // prevent webpack from injecting useless setImmediate polyfill because Vue
86
-    // source contains it (although only uses it if it's native).
87
-    setImmediate: false,
88
-    // prevent webpack from injecting mocks to Node native modules
89
-    // that does not make sense for the client
90
-    dgram: 'empty',
91
-    fs: 'empty',
92
-    net: 'empty',
93
-    tls: 'empty',
94
-    child_process: 'empty'
95
-  }
96
-}

+ 0
- 95
build/webpack.dev.conf.js 查看文件

@@ -1,95 +0,0 @@
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: [`本地: http://${devWebpackConfig.devServer.host}:${port}`, `终于整出来IP地址了: http://${require('ip').address()}:${port}`,],
86
-        },
87
-        onErrors: config.dev.notifyOnErrors
88
-          ? utils.createNotifierCallback()
89
-          : undefined
90
-      }))
91
-
92
-      resolve(devWebpackConfig)
93
-    }
94
-  })
95
-})

+ 0
- 145
build/webpack.prod.conf.js 查看文件

@@ -1,145 +0,0 @@
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

+ 0
- 7
config/dev.env.js 查看文件

@@ -1,7 +0,0 @@
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
-})

+ 0
- 76
config/index.js 查看文件

@@ -1,76 +0,0 @@
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
-    // 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: '/',
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
67
-    productionGzip: false,
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
-}

+ 0
- 4
config/prod.env.js 查看文件

@@ -1,4 +0,0 @@
1
-'use strict'
2
-module.exports = {
3
-  NODE_ENV: '"production"'
4
-}

+ 0
- 11
index.html 查看文件

@@ -9,17 +9,6 @@
9 9
 </head>
10 10
 
11 11
 <body>
12
-  <style>
13
-    html,
14
-    body {
15
-      margin: 0;
16
-      padding: 0;
17
-      background: linear-gradient(to left, rgb(14, 14, 14), rgb(6, 6, 6));
18
-    }
19
-
20
-    /* background-color: #0E0E0E; */
21
-    /* background: linear-gradient(to right, #E0E0E, #060606;) */
22
-  </style>
23 12
   <div id="app"></div>
24 13
   <!-- built files will be auto injected -->
25 14
 </body>

+ 15
- 47
package.json 查看文件

@@ -5,60 +5,28 @@
5 5
   "author": "Baozhangchao <3257874327@qq.com>",
6 6
   "private": true,
7 7
   "scripts": {
8
-    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 0.0.0.0",
9
-    "start": "npm run dev",
10
-    "lint": "eslint --ext .js,.vue src",
11
-    "build": "node build/build.js"
8
+    "serve": "vue-cli-service serve",
9
+    "build": "vue-cli-service build",
10
+    "lint": "vue-cli-service lint"
12 11
   },
13 12
   "dependencies": {
14
-    "vue": "^2.5.2",
13
+    "core-js": "^3.6.5",
14
+    "swiper": "6.8.4",
15
+    "vant": "^2.12.44",
16
+    "vue": "^2.6.11",
15 17
     "vue-router": "^3.0.1"
16 18
   },
17 19
   "devDependencies": {
18
-    "autoprefixer": "^7.1.2",
19
-    "babel-core": "^6.22.1",
20
-    "babel-eslint": "^8.2.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
-    "eslint": "^4.15.0",
32
-    "eslint-friendly-formatter": "^3.0.0",
33
-    "eslint-loader": "^1.7.1",
34
-    "eslint-plugin-vue": "^4.0.0",
35
-    "extract-text-webpack-plugin": "^3.0.0",
36
-    "file-loader": "^1.1.4",
37
-    "friendly-errors-webpack-plugin": "^1.6.1",
38
-    "html-webpack-plugin": "^2.30.1",
39
-    "node-notifier": "^5.1.2",
40
-    "optimize-css-assets-webpack-plugin": "^3.2.0",
41
-    "ora": "^1.2.0",
42
-    "portfinder": "^1.0.13",
43
-    "postcss-import": "^11.0.0",
44
-    "postcss-loader": "^2.0.8",
45
-    "postcss-url": "^7.2.1",
46
-    "rimraf": "^2.6.0",
20
+    "@vue/cli-plugin-babel": "~4.5.0",
21
+    "@vue/cli-plugin-eslint": "~4.5.0",
22
+    "@vue/cli-service": "~4.5.0",
23
+    "babel-eslint": "^10.1.0",
24
+    "babel-plugin-import": "^1.13.3",
25
+    "eslint": "^6.7.2",
26
+    "eslint-plugin-vue": "^6.2.2",
47 27
     "sass": "^1.49.7",
48 28
     "sass-loader": "^7.3.1",
49
-    "semver": "^5.3.0",
50
-    "shelljs": "^0.7.6",
51
-    "style-loader": "^3.3.1",
52
-    "swiper": "^8.0.5",
53
-    "uglifyjs-webpack-plugin": "^1.1.1",
54
-    "url-loader": "^0.5.8",
55
-    "vue-loader": "^13.3.0",
56
-    "vue-style-loader": "^3.0.1",
57
-    "vue-template-compiler": "^2.5.2",
58
-    "webpack": "^3.6.0",
59
-    "webpack-bundle-analyzer": "^2.9.0",
60
-    "webpack-dev-server": "^2.9.1",
61
-    "webpack-merge": "^4.1.0"
29
+    "vue-template-compiler": "^2.6.11"
62 30
   },
63 31
   "engines": {
64 32
     "node": ">= 6.0.0",

+ 6
- 1
src/App.vue 查看文件

@@ -10,5 +10,10 @@ export default {
10 10
 }
11 11
 </script>
12 12
 
13
-<style lang="scss" scoped>
13
+<style>
14
+html, body, #app {
15
+  margin: 0;
16
+  height: 100%;
17
+  background: linear-gradient(to left, rgb(14, 14, 14), rgb(6, 6, 6));
18
+}
14 19
 </style>

+ 67
- 0
src/components/AreaPicker/index.vue 查看文件

@@ -0,0 +1,67 @@
1
+<template>
2
+  <van-popup v-model="show">
3
+    <van-area title="地区" v-model="value" :area-list="areaList" :loading="loading" @confirm="$emit('change')" />
4
+  </van-popup>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: 'AreaPicker',
10
+  props: {
11
+    value: {
12
+      type: Array,
13
+      default: () => []
14
+    },
15
+    show: Boolean
16
+  },
17
+  data() {
18
+    return {
19
+      loading: false,
20
+      list: []
21
+    }
22
+  },
23
+  computed: {
24
+    areaList() {
25
+      return this.list.reduce((acc, x) => {
26
+        const { province_list, city_list, county_list } = acc
27
+
28
+        province_list[x.adcode] = x.name
29
+        x.districts.forEach(y => {
30
+          city_list[y.adcode] = y.name
31
+
32
+          y.districts.forEach(z => {
33
+            county_list[z.adcode] = z.name
34
+          })
35
+        })
36
+
37
+        return { province_list, city_list, county_list }
38
+      }, {
39
+          province_list: {},
40
+          city_list: {},
41
+          county_list: {}
42
+        })
43
+    }
44
+  },
45
+  mounted() {
46
+    this.getAreaData()
47
+  },
48
+  methods: {
49
+    getAreaData() {
50
+      const list = localStorage.getItem('areas')
51
+      if (list) {
52
+        this.list = JSON.parse(list)
53
+        return
54
+      }
55
+
56
+      this.loading = true
57
+
58
+      // 如果不存在
59
+      fetch('https://restapi.amap.com/v3/config/district?keywords=中国&subdistrict=3&key=194d2c8d01a9084e3b0bbb62d2d5fad0').then(res => res.JSON()).then(res => {
60
+        this.list = res.districts[0].districts
61
+        localStorage.setItem('area', this.list)
62
+        this.loading = false
63
+      })
64
+    }
65
+  }
66
+}
67
+</script>

+ 3
- 4
src/main.js 查看文件

@@ -14,8 +14,7 @@ Vue.component('swiper', Swiper)
14 14
 Vue.component('swiper-slide', SwiperSlide)
15 15
 /* eslint-disable no-new */
16 16
 new Vue({
17
-  el: '#app',
18 17
   router,
19
-  components: { App },
20
-  template: '<App/>'
21
-})
18
+  render: h => h(App),
19
+}).$mount('#app')
20
+

+ 9
- 5
src/pages/signup.vue 查看文件

@@ -49,7 +49,7 @@
49 49
           v-model="formData.intendedProduct"
50 50
         />
51 51
       </div>
52
-      <div class="formItem addressdiv">
52
+      <div class="formItem addressdiv" @click="showArea = true">
53 53
         <label>所在地区</label>
54 54
         <input
55 55
           class="address"
@@ -68,13 +68,17 @@
68 68
   </div>
69 69
 </template>
70 70
 <script>
71
-import checked from '../../public/images/signup/checked.png'
72
-import Unchecked from '../../public/images/signup/Unchecked.png'
71
+// import checked from '../../public/images/signup/checked.png'
72
+// import Unchecked from '../../public/images/signup/Unchecked.png'
73 73
 export default {
74
+  components: {
75
+    // AreaPicker: () => import('@/components/AreaPicker.vue')
76
+  },
74 77
   data() {
75 78
     return {
76
-      checked,
77
-      Unchecked,
79
+      showArea: false,
80
+      checked: `./images/signup/checked.png`,
81
+      Unchecked: `./images/signup/Unchecked.png`,
78 82
       ischecked: true,
79 83
       formData: {
80 84
         role: 'user',

+ 0
- 0
static/.gitkeep 查看文件


+ 3
- 0
vue.config.js 查看文件

@@ -0,0 +1,3 @@
1
+module.exports = {
2
+  publicPath: './'
3
+}

+ 3823
- 2911
yarn.lock
文件差异内容过多而无法显示
查看文件