Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop-ui into dev-gl
@ -1,10 +0,0 @@
 | 
			
		||||
// https://github.com/michael-ciniawsky/postcss-load-config
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  "plugins": {
 | 
			
		||||
    "postcss-import": {},
 | 
			
		||||
    "postcss-url": {},
 | 
			
		||||
    // to  target browsers: use "browserslist" field in package.json
 | 
			
		||||
    "autoprefixer": {}
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,25 +1,19 @@
 | 
			
		||||
### 全局css src/assets/styles
 | 
			
		||||
# new
 | 
			
		||||
 | 
			
		||||
### 工具类 src/plugins
 | 
			
		||||
## Project setup
 | 
			
		||||
```
 | 
			
		||||
npm install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 顶部广告页 src/components/advertising
 | 
			
		||||
 | 
			
		||||
### 全部商品分类  components/nav
 | 
			
		||||
 | 
			
		||||
### 底部导航栏   components/footer
 | 
			
		||||
 | 
			
		||||
### 发票模态框  components/invoiceModal
 | 
			
		||||
 | 
			
		||||
### 商品详情   pages/GoodsDetail.vue
 | 
			
		||||
 | 
			
		||||
#### 商品详情组件  components/goodsDetail
 | 
			
		||||
 | 
			
		||||
### 全部商品分类  pages/AllCategories.vue
 | 
			
		||||
 | 
			
		||||
### 意见反馈 pages/Feedback.vue
 | 
			
		||||
 | 
			
		||||
### 卡片的封装  components/card
 | 
			
		||||
 | 
			
		||||
### 购物车    pages/Cart.vue
 | 
			
		||||
### Compiles and hot-reloads for development
 | 
			
		||||
```
 | 
			
		||||
npm run serve
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Compiles and minifies for production
 | 
			
		||||
```
 | 
			
		||||
npm run build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Customize configuration
 | 
			
		||||
See [Configuration Reference](https://cli.vuejs.org/config/).
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								buyer/babel.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,5 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
  presets: [
 | 
			
		||||
    '@vue/cli-plugin-babel/preset'
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
require('./check-versions')()
 | 
			
		||||
 | 
			
		||||
process.env.NODE_ENV = 'production'
 | 
			
		||||
 | 
			
		||||
const ora = require('ora')
 | 
			
		||||
const rm = require('rimraf')
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const chalk = require('chalk')
 | 
			
		||||
const webpack = require('webpack')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const webpackConfig = require('./webpack.prod.conf')
 | 
			
		||||
 | 
			
		||||
const spinner = ora('building for production...')
 | 
			
		||||
spinner.start()
 | 
			
		||||
 | 
			
		||||
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
 | 
			
		||||
  if (err) throw err
 | 
			
		||||
  webpack(webpackConfig, (err, stats) => {
 | 
			
		||||
    spinner.stop()
 | 
			
		||||
    if (err) throw err
 | 
			
		||||
    process.stdout.write(stats.toString({
 | 
			
		||||
      colors: true,
 | 
			
		||||
      modules: false,
 | 
			
		||||
      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
 | 
			
		||||
      chunks: false,
 | 
			
		||||
      chunkModules: false
 | 
			
		||||
    }) + '\n\n')
 | 
			
		||||
 | 
			
		||||
    if (stats.hasErrors()) {
 | 
			
		||||
      console.log(chalk.red('  Build failed with errors.\n'))
 | 
			
		||||
      process.exit(1)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log(chalk.cyan('  Build complete.\n'))
 | 
			
		||||
    console.log(chalk.yellow(
 | 
			
		||||
      '  Tip: built files are meant to be served over an HTTP server.\n' +
 | 
			
		||||
      '  Opening index.html over file:// won\'t work.\n'
 | 
			
		||||
    ))
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@ -1,54 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const chalk = require('chalk')
 | 
			
		||||
const semver = require('semver')
 | 
			
		||||
const packageConfig = require('../package.json')
 | 
			
		||||
const shell = require('shelljs')
 | 
			
		||||
 | 
			
		||||
function exec (cmd) {
 | 
			
		||||
  return require('child_process').execSync(cmd).toString().trim()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const versionRequirements = [
 | 
			
		||||
  {
 | 
			
		||||
    name: 'node',
 | 
			
		||||
    currentVersion: semver.clean(process.version),
 | 
			
		||||
    versionRequirement: packageConfig.engines.node
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if (shell.which('npm')) {
 | 
			
		||||
  versionRequirements.push({
 | 
			
		||||
    name: 'npm',
 | 
			
		||||
    currentVersion: exec('npm --version'),
 | 
			
		||||
    versionRequirement: packageConfig.engines.npm
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = function () {
 | 
			
		||||
  const warnings = []
 | 
			
		||||
 | 
			
		||||
  for (let i = 0; i < versionRequirements.length; i++) {
 | 
			
		||||
    const mod = versionRequirements[i]
 | 
			
		||||
 | 
			
		||||
    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
 | 
			
		||||
      warnings.push(mod.name + ': ' +
 | 
			
		||||
        chalk.red(mod.currentVersion) + ' should be ' +
 | 
			
		||||
        chalk.green(mod.versionRequirement)
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (warnings.length) {
 | 
			
		||||
    console.log('')
 | 
			
		||||
    console.log(chalk.yellow('To use this template, you must update following to modules:'))
 | 
			
		||||
    console.log()
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < warnings.length; i++) {
 | 
			
		||||
      const warning = warnings[i]
 | 
			
		||||
      console.log('  ' + warning)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log()
 | 
			
		||||
    process.exit(1)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,110 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
 | 
			
		||||
const packageConfig = require('../package.json')
 | 
			
		||||
 | 
			
		||||
exports.assetsPath = function (_path) {
 | 
			
		||||
  const assetsSubDirectory = process.env.NODE_ENV === 'production'
 | 
			
		||||
    ? config.build.assetsSubDirectory
 | 
			
		||||
    : config.dev.assetsSubDirectory
 | 
			
		||||
 | 
			
		||||
  return path.posix.join(assetsSubDirectory, _path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.cssLoaders = function (options) {
 | 
			
		||||
  options = options || {}
 | 
			
		||||
 | 
			
		||||
  const cssLoader = {
 | 
			
		||||
    loader: 'css-loader',
 | 
			
		||||
    options: {
 | 
			
		||||
      sourceMap: options.sourceMap
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const postcssLoader = {
 | 
			
		||||
    loader: 'postcss-loader',
 | 
			
		||||
    options: {
 | 
			
		||||
      sourceMap: options.sourceMap
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // generate loader string to be used with extract text plugin
 | 
			
		||||
  function generateLoaders (loader, loaderOptions) {
 | 
			
		||||
    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
 | 
			
		||||
 | 
			
		||||
    if (loader) {
 | 
			
		||||
      loaders.push({
 | 
			
		||||
        loader: loader + '-loader',
 | 
			
		||||
        options: Object.assign({}, loaderOptions, {
 | 
			
		||||
          sourceMap: options.sourceMap
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Extract CSS when that option is specified
 | 
			
		||||
    // (which is the case during production build)
 | 
			
		||||
    if (options.extract) {
 | 
			
		||||
      return ExtractTextPlugin.extract({
 | 
			
		||||
        use: loaders,
 | 
			
		||||
        fallback: 'vue-style-loader',
 | 
			
		||||
        publicPath: '../../'
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      return ['vue-style-loader'].concat(loaders)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
 | 
			
		||||
  return {
 | 
			
		||||
    css: generateLoaders(),
 | 
			
		||||
    postcss: generateLoaders(),
 | 
			
		||||
    less: generateLoaders('less' , { javascriptEnabled : true }),
 | 
			
		||||
    sass: generateLoaders('sass', { indentedSyntax: true }),
 | 
			
		||||
    scss: generateLoaders('sass').concat(
 | 
			
		||||
      {
 | 
			
		||||
        loader: 'sass-resources-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
            //你自己的scss全局文件的路径
 | 
			
		||||
          resources: path.resolve(__dirname, '../src/assets/styles/global.scss')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    ),
 | 
			
		||||
    stylus: generateLoaders('stylus'),
 | 
			
		||||
    styl: generateLoaders('stylus')
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Generate loaders for standalone style files (outside of .vue)
 | 
			
		||||
exports.styleLoaders = function (options) {
 | 
			
		||||
  const output = []
 | 
			
		||||
  const loaders = exports.cssLoaders(options)
 | 
			
		||||
 | 
			
		||||
  for (const extension in loaders) {
 | 
			
		||||
    const loader = loaders[extension]
 | 
			
		||||
    output.push({
 | 
			
		||||
      test: new RegExp('\\.' + extension + '$'),
 | 
			
		||||
      use: loader
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return output
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.createNotifierCallback = () => {
 | 
			
		||||
  const notifier = require('node-notifier')
 | 
			
		||||
 | 
			
		||||
  return (severity, errors) => {
 | 
			
		||||
    if (severity !== 'error') return
 | 
			
		||||
 | 
			
		||||
    const error = errors[0]
 | 
			
		||||
    const filename = error.file && error.file.split('!').pop()
 | 
			
		||||
 | 
			
		||||
    notifier.notify({
 | 
			
		||||
      title: packageConfig.name,
 | 
			
		||||
      message: severity + ': ' + error.name,
 | 
			
		||||
      subtitle: filename || '',
 | 
			
		||||
      icon: path.join(__dirname, 'logo.png')
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const isProduction = process.env.NODE_ENV === 'production'
 | 
			
		||||
const sourceMapEnabled = isProduction
 | 
			
		||||
  ? config.build.productionSourceMap
 | 
			
		||||
  : config.dev.cssSourceMap
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  loaders: utils.cssLoaders({
 | 
			
		||||
    sourceMap: sourceMapEnabled,
 | 
			
		||||
    extract: isProduction
 | 
			
		||||
  }),
 | 
			
		||||
  cssSourceMap: sourceMapEnabled,
 | 
			
		||||
  cacheBusting: config.dev.cacheBusting,
 | 
			
		||||
  transformToRequire: {
 | 
			
		||||
    video: ['src', 'poster'],
 | 
			
		||||
    source: 'src',
 | 
			
		||||
    img: 'src',
 | 
			
		||||
    image: 'xlink:href'
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,111 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const vueLoaderConfig = require('./vue-loader.conf')
 | 
			
		||||
 | 
			
		||||
function resolve (dir) {
 | 
			
		||||
  return path.join(__dirname, '..', dir)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const createLintingRule = () => ({
 | 
			
		||||
  test: /\.(js|vue)$/,
 | 
			
		||||
  loader: 'eslint-loader',
 | 
			
		||||
  enforce: 'pre',
 | 
			
		||||
  include: [resolve('src'), resolve('test')],
 | 
			
		||||
  options: {
 | 
			
		||||
    formatter: require('eslint-friendly-formatter'),
 | 
			
		||||
    emitWarning: !config.dev.showEslintErrorsInOverlay
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  context: path.resolve(__dirname, '../'),
 | 
			
		||||
  entry: {
 | 
			
		||||
    app: './src/main.js'
 | 
			
		||||
  },
 | 
			
		||||
  output: {
 | 
			
		||||
    path: config.build.assetsRoot,
 | 
			
		||||
    filename: '[name].js',
 | 
			
		||||
    publicPath: process.env.NODE_ENV === 'production'
 | 
			
		||||
      ? config.build.assetsPublicPath
 | 
			
		||||
      : config.dev.assetsPublicPath
 | 
			
		||||
  },
 | 
			
		||||
  resolve: {
 | 
			
		||||
    extensions: ['.js', '.vue', '.json'],
 | 
			
		||||
    alias: {
 | 
			
		||||
      'vue$': 'vue/dist/vue.esm.js',
 | 
			
		||||
      '@': resolve('src'),
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: [
 | 
			
		||||
      // ...(config.dev.useEslint ? [createLintingRule()] : []),
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.vue$/,
 | 
			
		||||
        loader: 'vue-loader',
 | 
			
		||||
        options: vueLoaderConfig
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.scss$/,
 | 
			
		||||
        loaders: ['style', 'css', 'sass']
 | 
			
		||||
      },
 | 
			
		||||
      // {
 | 
			
		||||
 | 
			
		||||
      //   test: /\.less$/,
 | 
			
		||||
        
 | 
			
		||||
      //   loader: "style-loader!css-loader!less-loader",
 | 
			
		||||
        
 | 
			
		||||
      //   },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.js$/,
 | 
			
		||||
        loader: 'babel-loader',
 | 
			
		||||
        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('media/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(cur)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('cur/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  node: {
 | 
			
		||||
    // prevent webpack from injecting useless setImmediate polyfill because Vue
 | 
			
		||||
    // source contains it (although only uses it if it's native).
 | 
			
		||||
    setImmediate: false,
 | 
			
		||||
    // prevent webpack from injecting mocks to Node native modules
 | 
			
		||||
    // that does not make sense for the client
 | 
			
		||||
    dgram: 'empty',
 | 
			
		||||
    fs: 'empty',
 | 
			
		||||
    net: 'empty',
 | 
			
		||||
    tls: 'empty',
 | 
			
		||||
    child_process: 'empty'
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,95 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const webpack = require('webpack')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const merge = require('webpack-merge')
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const baseWebpackConfig = require('./webpack.base.conf')
 | 
			
		||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
 | 
			
		||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
 | 
			
		||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
 | 
			
		||||
const portfinder = require('portfinder')
 | 
			
		||||
 | 
			
		||||
const HOST = process.env.HOST
 | 
			
		||||
const PORT = process.env.PORT && Number(process.env.PORT)
 | 
			
		||||
 | 
			
		||||
const devWebpackConfig = merge(baseWebpackConfig, {
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
 | 
			
		||||
  },
 | 
			
		||||
  // cheap-module-eval-source-map is faster for development
 | 
			
		||||
  devtool: config.dev.devtool,
 | 
			
		||||
 | 
			
		||||
  // these devServer options should be customized in /config/index.js
 | 
			
		||||
  devServer: {
 | 
			
		||||
    clientLogLevel: 'warning',
 | 
			
		||||
    historyApiFallback: {
 | 
			
		||||
      rewrites: [
 | 
			
		||||
        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    hot: true,
 | 
			
		||||
    contentBase: false, // since we use CopyWebpackPlugin.
 | 
			
		||||
    compress: true,
 | 
			
		||||
    host: HOST || config.dev.host,
 | 
			
		||||
    port: PORT || config.dev.port,
 | 
			
		||||
    open: config.dev.autoOpenBrowser,
 | 
			
		||||
    overlay: config.dev.errorOverlay
 | 
			
		||||
      ? { warnings: false, errors: true }
 | 
			
		||||
      : false,
 | 
			
		||||
    publicPath: config.dev.assetsPublicPath,
 | 
			
		||||
    proxy: config.dev.proxyTable,
 | 
			
		||||
    quiet: true, // necessary for FriendlyErrorsPlugin
 | 
			
		||||
    watchOptions: {
 | 
			
		||||
      poll: config.dev.poll,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    new webpack.DefinePlugin({
 | 
			
		||||
      'process.env': require('../config/dev.env')
 | 
			
		||||
    }),
 | 
			
		||||
    new webpack.HotModuleReplacementPlugin(),
 | 
			
		||||
    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
 | 
			
		||||
    new webpack.NoEmitOnErrorsPlugin(),
 | 
			
		||||
    // https://github.com/ampedandwired/html-webpack-plugin
 | 
			
		||||
    new HtmlWebpackPlugin({
 | 
			
		||||
      filename: 'index.html',
 | 
			
		||||
      template: 'index.html',
 | 
			
		||||
      inject: true
 | 
			
		||||
    }),
 | 
			
		||||
    // copy custom static assets
 | 
			
		||||
    new CopyWebpackPlugin([
 | 
			
		||||
      {
 | 
			
		||||
        from: path.resolve(__dirname, '../static'),
 | 
			
		||||
        to: config.dev.assetsSubDirectory,
 | 
			
		||||
        ignore: ['.*']
 | 
			
		||||
      }
 | 
			
		||||
    ])
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
module.exports = new Promise((resolve, reject) => {
 | 
			
		||||
  portfinder.basePort = process.env.PORT || config.dev.port
 | 
			
		||||
  portfinder.getPort((err, port) => {
 | 
			
		||||
    if (err) {
 | 
			
		||||
      reject(err)
 | 
			
		||||
    } else {
 | 
			
		||||
      // publish the new Port, necessary for e2e tests
 | 
			
		||||
      process.env.PORT = port
 | 
			
		||||
      // add port to devServer config
 | 
			
		||||
      devWebpackConfig.devServer.port = port
 | 
			
		||||
 | 
			
		||||
      // Add FriendlyErrorsPlugin
 | 
			
		||||
      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
 | 
			
		||||
        compilationSuccessInfo: {
 | 
			
		||||
          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
 | 
			
		||||
        },
 | 
			
		||||
        onErrors: config.dev.notifyOnErrors
 | 
			
		||||
        ? utils.createNotifierCallback()
 | 
			
		||||
        : undefined
 | 
			
		||||
      }))
 | 
			
		||||
 | 
			
		||||
      resolve(devWebpackConfig)
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@ -1,145 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const webpack = require('webpack')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const merge = require('webpack-merge')
 | 
			
		||||
const baseWebpackConfig = require('./webpack.base.conf')
 | 
			
		||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
 | 
			
		||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
 | 
			
		||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
 | 
			
		||||
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
 | 
			
		||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
 | 
			
		||||
 | 
			
		||||
const env = require('../config/prod.env')
 | 
			
		||||
 | 
			
		||||
const webpackConfig = merge(baseWebpackConfig, {
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: utils.styleLoaders({
 | 
			
		||||
      sourceMap: config.build.productionSourceMap,
 | 
			
		||||
      extract: false,
 | 
			
		||||
      usePostCSS: true
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  devtool: config.build.productionSourceMap ? config.build.devtool : false,
 | 
			
		||||
  output: {
 | 
			
		||||
    path: config.build.assetsRoot,
 | 
			
		||||
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
 | 
			
		||||
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    // http://vuejs.github.io/vue-loader/en/workflow/production.html
 | 
			
		||||
    new webpack.DefinePlugin({
 | 
			
		||||
      'process.env': env
 | 
			
		||||
    }),
 | 
			
		||||
    new UglifyJsPlugin({
 | 
			
		||||
      uglifyOptions: {
 | 
			
		||||
        compress: {
 | 
			
		||||
          warnings: false
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      sourceMap: config.build.productionSourceMap,
 | 
			
		||||
      parallel: true
 | 
			
		||||
    }),
 | 
			
		||||
    // extract css into its own file
 | 
			
		||||
    new ExtractTextPlugin({
 | 
			
		||||
      filename: utils.assetsPath('css/[name].[contenthash].css'),
 | 
			
		||||
      // Setting the following option to `false` will not extract CSS from codesplit chunks.
 | 
			
		||||
      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
 | 
			
		||||
      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
 | 
			
		||||
      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
 | 
			
		||||
      allChunks: true,
 | 
			
		||||
    }),
 | 
			
		||||
    // Compress extracted CSS. We are using this plugin so that possible
 | 
			
		||||
    // duplicated CSS from different components can be deduped.
 | 
			
		||||
    new OptimizeCSSPlugin({
 | 
			
		||||
      cssProcessorOptions: config.build.productionSourceMap
 | 
			
		||||
        ? { safe: true, map: { inline: false } }
 | 
			
		||||
        : { safe: true }
 | 
			
		||||
    }),
 | 
			
		||||
    // generate dist index.html with correct asset hash for caching.
 | 
			
		||||
    // you can customize output by editing /index.html
 | 
			
		||||
    // see https://github.com/ampedandwired/html-webpack-plugin
 | 
			
		||||
    new HtmlWebpackPlugin({
 | 
			
		||||
      filename: config.build.index,
 | 
			
		||||
      template: 'index.html',
 | 
			
		||||
      inject: true,
 | 
			
		||||
      minify: {
 | 
			
		||||
        removeComments: true,
 | 
			
		||||
        collapseWhitespace: true,
 | 
			
		||||
        removeAttributeQuotes: true
 | 
			
		||||
        // more options:
 | 
			
		||||
        // https://github.com/kangax/html-minifier#options-quick-reference
 | 
			
		||||
      },
 | 
			
		||||
      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
 | 
			
		||||
      chunksSortMode: 'dependency'
 | 
			
		||||
    }),
 | 
			
		||||
    // keep module.id stable when vendor modules does not change
 | 
			
		||||
    new webpack.HashedModuleIdsPlugin(),
 | 
			
		||||
    // enable scope hoisting
 | 
			
		||||
    new webpack.optimize.ModuleConcatenationPlugin(),
 | 
			
		||||
    // split vendor js into its own file
 | 
			
		||||
    new webpack.optimize.CommonsChunkPlugin({
 | 
			
		||||
      name: 'vendor',
 | 
			
		||||
      minChunks (module) {
 | 
			
		||||
        // any required modules inside node_modules are extracted to vendor
 | 
			
		||||
        return (
 | 
			
		||||
          module.resource &&
 | 
			
		||||
          /\.js$/.test(module.resource) &&
 | 
			
		||||
          module.resource.indexOf(
 | 
			
		||||
            path.join(__dirname, '../node_modules')
 | 
			
		||||
          ) === 0
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
    }),
 | 
			
		||||
    // extract webpack runtime and module manifest to its own file in order to
 | 
			
		||||
    // prevent vendor hash from being updated whenever app bundle is updated
 | 
			
		||||
    new webpack.optimize.CommonsChunkPlugin({
 | 
			
		||||
      name: 'manifest',
 | 
			
		||||
      minChunks: Infinity
 | 
			
		||||
    }),
 | 
			
		||||
    // This instance extracts shared chunks from code splitted chunks and bundles them
 | 
			
		||||
    // in a separate chunk, similar to the vendor chunk
 | 
			
		||||
    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
 | 
			
		||||
    new webpack.optimize.CommonsChunkPlugin({
 | 
			
		||||
      name: 'app',
 | 
			
		||||
      async: 'vendor-async',
 | 
			
		||||
      children: true,
 | 
			
		||||
      minChunks: 3
 | 
			
		||||
    }),
 | 
			
		||||
 | 
			
		||||
    // copy custom static assets
 | 
			
		||||
    new CopyWebpackPlugin([
 | 
			
		||||
      {
 | 
			
		||||
        from: path.resolve(__dirname, '../static'),
 | 
			
		||||
        to: config.build.assetsSubDirectory,
 | 
			
		||||
        ignore: ['.*']
 | 
			
		||||
      }
 | 
			
		||||
    ])
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if (config.build.productionGzip) {
 | 
			
		||||
  const CompressionWebpackPlugin = require('compression-webpack-plugin')
 | 
			
		||||
 | 
			
		||||
  webpackConfig.plugins.push(
 | 
			
		||||
    new CompressionWebpackPlugin({
 | 
			
		||||
      asset: '[path].gz[query]',
 | 
			
		||||
      algorithm: 'gzip',
 | 
			
		||||
      test: new RegExp(
 | 
			
		||||
        '\\.(' +
 | 
			
		||||
        config.build.productionGzipExtensions.join('|') +
 | 
			
		||||
        ')$'
 | 
			
		||||
      ),
 | 
			
		||||
      threshold: 10240,
 | 
			
		||||
      minRatio: 0.8
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (config.build.bundleAnalyzerReport) {
 | 
			
		||||
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
 | 
			
		||||
  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = webpackConfig
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
require('./check-versions')()
 | 
			
		||||
 | 
			
		||||
process.env.NODE_ENV = 'production'
 | 
			
		||||
 | 
			
		||||
const ora = require('ora')
 | 
			
		||||
const rm = require('rimraf')
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const chalk = require('chalk')
 | 
			
		||||
const webpack = require('webpack')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const webpackConfig = require('./webpack.prod.conf')
 | 
			
		||||
 | 
			
		||||
const spinner = ora('building for production...')
 | 
			
		||||
spinner.start()
 | 
			
		||||
 | 
			
		||||
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
 | 
			
		||||
  if (err) throw err
 | 
			
		||||
  webpack(webpackConfig, (err, stats) => {
 | 
			
		||||
    spinner.stop()
 | 
			
		||||
    if (err) throw err
 | 
			
		||||
    process.stdout.write(stats.toString({
 | 
			
		||||
      colors: true,
 | 
			
		||||
      modules: false,
 | 
			
		||||
      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
 | 
			
		||||
      chunks: false,
 | 
			
		||||
      chunkModules: false
 | 
			
		||||
    }) + '\n\n')
 | 
			
		||||
 | 
			
		||||
    if (stats.hasErrors()) {
 | 
			
		||||
      console.log(chalk.red('  Build failed with errors.\n'))
 | 
			
		||||
      process.exit(1)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log(chalk.cyan('  Build complete.\n'))
 | 
			
		||||
    console.log(chalk.yellow(
 | 
			
		||||
      '  Tip: built files are meant to be served over an HTTP server.\n' +
 | 
			
		||||
      '  Opening index.html over file:// won\'t work.\n'
 | 
			
		||||
    ))
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@ -1,54 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const chalk = require('chalk')
 | 
			
		||||
const semver = require('semver')
 | 
			
		||||
const packageConfig = require('../package.json')
 | 
			
		||||
const shell = require('shelljs')
 | 
			
		||||
 | 
			
		||||
function exec (cmd) {
 | 
			
		||||
  return require('child_process').execSync(cmd).toString().trim()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const versionRequirements = [
 | 
			
		||||
  {
 | 
			
		||||
    name: 'node',
 | 
			
		||||
    currentVersion: semver.clean(process.version),
 | 
			
		||||
    versionRequirement: packageConfig.engines.node
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if (shell.which('npm')) {
 | 
			
		||||
  versionRequirements.push({
 | 
			
		||||
    name: 'npm',
 | 
			
		||||
    currentVersion: exec('npm --version'),
 | 
			
		||||
    versionRequirement: packageConfig.engines.npm
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = function () {
 | 
			
		||||
  const warnings = []
 | 
			
		||||
 | 
			
		||||
  for (let i = 0; i < versionRequirements.length; i++) {
 | 
			
		||||
    const mod = versionRequirements[i]
 | 
			
		||||
 | 
			
		||||
    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
 | 
			
		||||
      warnings.push(mod.name + ': ' +
 | 
			
		||||
        chalk.red(mod.currentVersion) + ' should be ' +
 | 
			
		||||
        chalk.green(mod.versionRequirement)
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (warnings.length) {
 | 
			
		||||
    console.log('')
 | 
			
		||||
    console.log(chalk.yellow('To use this template, you must update following to modules:'))
 | 
			
		||||
    console.log()
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < warnings.length; i++) {
 | 
			
		||||
      const warning = warnings[i]
 | 
			
		||||
      console.log('  ' + warning)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log()
 | 
			
		||||
    process.exit(1)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,110 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
 | 
			
		||||
const packageConfig = require('../package.json')
 | 
			
		||||
 | 
			
		||||
exports.assetsPath = function (_path) {
 | 
			
		||||
  const assetsSubDirectory = process.env.NODE_ENV === 'production'
 | 
			
		||||
    ? config.build.assetsSubDirectory
 | 
			
		||||
    : config.dev.assetsSubDirectory
 | 
			
		||||
 | 
			
		||||
  return path.posix.join(assetsSubDirectory, _path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.cssLoaders = function (options) {
 | 
			
		||||
  options = options || {}
 | 
			
		||||
 | 
			
		||||
  const cssLoader = {
 | 
			
		||||
    loader: 'css-loader',
 | 
			
		||||
    options: {
 | 
			
		||||
      sourceMap: options.sourceMap
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const postcssLoader = {
 | 
			
		||||
    loader: 'postcss-loader',
 | 
			
		||||
    options: {
 | 
			
		||||
      sourceMap: options.sourceMap
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // generate loader string to be used with extract text plugin
 | 
			
		||||
  function generateLoaders (loader, loaderOptions) {
 | 
			
		||||
    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
 | 
			
		||||
 | 
			
		||||
    if (loader) {
 | 
			
		||||
      loaders.push({
 | 
			
		||||
        loader: loader + '-loader',
 | 
			
		||||
        options: Object.assign({}, loaderOptions, {
 | 
			
		||||
          sourceMap: options.sourceMap
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Extract CSS when that option is specified
 | 
			
		||||
    // (which is the case during production build)
 | 
			
		||||
    if (options.extract) {
 | 
			
		||||
      return ExtractTextPlugin.extract({
 | 
			
		||||
        use: loaders,
 | 
			
		||||
        fallback: 'vue-style-loader',
 | 
			
		||||
        publicPath: '../../'
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      return ['vue-style-loader'].concat(loaders)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
 | 
			
		||||
  return {
 | 
			
		||||
    css: generateLoaders(),
 | 
			
		||||
    postcss: generateLoaders(),
 | 
			
		||||
    less: generateLoaders('less' , { javascriptEnabled : true }),
 | 
			
		||||
    sass: generateLoaders('sass', { indentedSyntax: true }),
 | 
			
		||||
    scss: generateLoaders('sass').concat(
 | 
			
		||||
      {
 | 
			
		||||
        loader: 'sass-resources-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
            //你自己的scss全局文件的路径
 | 
			
		||||
          resources: path.resolve(__dirname, '../src/assets/styles/global.scss')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    ),
 | 
			
		||||
    stylus: generateLoaders('stylus'),
 | 
			
		||||
    styl: generateLoaders('stylus')
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Generate loaders for standalone style files (outside of .vue)
 | 
			
		||||
exports.styleLoaders = function (options) {
 | 
			
		||||
  const output = []
 | 
			
		||||
  const loaders = exports.cssLoaders(options)
 | 
			
		||||
 | 
			
		||||
  for (const extension in loaders) {
 | 
			
		||||
    const loader = loaders[extension]
 | 
			
		||||
    output.push({
 | 
			
		||||
      test: new RegExp('\\.' + extension + '$'),
 | 
			
		||||
      use: loader
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return output
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.createNotifierCallback = () => {
 | 
			
		||||
  const notifier = require('node-notifier')
 | 
			
		||||
 | 
			
		||||
  return (severity, errors) => {
 | 
			
		||||
    if (severity !== 'error') return
 | 
			
		||||
 | 
			
		||||
    const error = errors[0]
 | 
			
		||||
    const filename = error.file && error.file.split('!').pop()
 | 
			
		||||
 | 
			
		||||
    notifier.notify({
 | 
			
		||||
      title: packageConfig.name,
 | 
			
		||||
      message: severity + ': ' + error.name,
 | 
			
		||||
      subtitle: filename || '',
 | 
			
		||||
      icon: path.join(__dirname, 'logo.png')
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const isProduction = process.env.NODE_ENV === 'production'
 | 
			
		||||
const sourceMapEnabled = isProduction
 | 
			
		||||
  ? config.build.productionSourceMap
 | 
			
		||||
  : config.dev.cssSourceMap
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  loaders: utils.cssLoaders({
 | 
			
		||||
    sourceMap: sourceMapEnabled,
 | 
			
		||||
    extract: isProduction
 | 
			
		||||
  }),
 | 
			
		||||
  cssSourceMap: sourceMapEnabled,
 | 
			
		||||
  cacheBusting: config.dev.cacheBusting,
 | 
			
		||||
  transformToRequire: {
 | 
			
		||||
    video: ['src', 'poster'],
 | 
			
		||||
    source: 'src',
 | 
			
		||||
    img: 'src',
 | 
			
		||||
    image: 'xlink:href'
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,111 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const vueLoaderConfig = require('./vue-loader.conf')
 | 
			
		||||
 | 
			
		||||
function resolve (dir) {
 | 
			
		||||
  return path.join(__dirname, '..', dir)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const createLintingRule = () => ({
 | 
			
		||||
  test: /\.(js|vue)$/,
 | 
			
		||||
  loader: 'eslint-loader',
 | 
			
		||||
  enforce: 'pre',
 | 
			
		||||
  include: [resolve('src'), resolve('test')],
 | 
			
		||||
  options: {
 | 
			
		||||
    formatter: require('eslint-friendly-formatter'),
 | 
			
		||||
    emitWarning: !config.dev.showEslintErrorsInOverlay
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  context: path.resolve(__dirname, '../'),
 | 
			
		||||
  entry: {
 | 
			
		||||
    app: './src/main.js'
 | 
			
		||||
  },
 | 
			
		||||
  output: {
 | 
			
		||||
    path: config.build.assetsRoot,
 | 
			
		||||
    filename: '[name].js',
 | 
			
		||||
    publicPath: process.env.NODE_ENV === 'production'
 | 
			
		||||
      ? config.build.assetsPublicPath
 | 
			
		||||
      : config.dev.assetsPublicPath
 | 
			
		||||
  },
 | 
			
		||||
  resolve: {
 | 
			
		||||
    extensions: ['.js', '.vue', '.json'],
 | 
			
		||||
    alias: {
 | 
			
		||||
      'vue$': 'vue/dist/vue.esm.js',
 | 
			
		||||
      '@': resolve('src'),
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: [
 | 
			
		||||
      // ...(config.dev.useEslint ? [createLintingRule()] : []),
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.vue$/,
 | 
			
		||||
        loader: 'vue-loader',
 | 
			
		||||
        options: vueLoaderConfig
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.scss$/,
 | 
			
		||||
        loaders: ['style', 'css', 'sass']
 | 
			
		||||
      },
 | 
			
		||||
      // {
 | 
			
		||||
 | 
			
		||||
      //   test: /\.less$/,
 | 
			
		||||
        
 | 
			
		||||
      //   loader: "style-loader!css-loader!less-loader",
 | 
			
		||||
        
 | 
			
		||||
      //   },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.js$/,
 | 
			
		||||
        loader: 'babel-loader',
 | 
			
		||||
        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('media/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(cur)(\?.*)?$/,
 | 
			
		||||
        loader: 'url-loader',
 | 
			
		||||
        options: {
 | 
			
		||||
          limit: 10000,
 | 
			
		||||
          name: utils.assetsPath('cur/[name].[hash:7].[ext]')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  node: {
 | 
			
		||||
    // prevent webpack from injecting useless setImmediate polyfill because Vue
 | 
			
		||||
    // source contains it (although only uses it if it's native).
 | 
			
		||||
    setImmediate: false,
 | 
			
		||||
    // prevent webpack from injecting mocks to Node native modules
 | 
			
		||||
    // that does not make sense for the client
 | 
			
		||||
    dgram: 'empty',
 | 
			
		||||
    fs: 'empty',
 | 
			
		||||
    net: 'empty',
 | 
			
		||||
    tls: 'empty',
 | 
			
		||||
    child_process: 'empty'
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,95 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const webpack = require('webpack')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const merge = require('webpack-merge')
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const baseWebpackConfig = require('./webpack.base.conf')
 | 
			
		||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
 | 
			
		||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
 | 
			
		||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
 | 
			
		||||
const portfinder = require('portfinder')
 | 
			
		||||
 | 
			
		||||
const HOST = process.env.HOST
 | 
			
		||||
const PORT = process.env.PORT && Number(process.env.PORT)
 | 
			
		||||
 | 
			
		||||
const devWebpackConfig = merge(baseWebpackConfig, {
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
 | 
			
		||||
  },
 | 
			
		||||
  // cheap-module-eval-source-map is faster for development
 | 
			
		||||
  devtool: config.dev.devtool,
 | 
			
		||||
 | 
			
		||||
  // these devServer options should be customized in /config/index.js
 | 
			
		||||
  devServer: {
 | 
			
		||||
    clientLogLevel: 'warning',
 | 
			
		||||
    historyApiFallback: {
 | 
			
		||||
      rewrites: [
 | 
			
		||||
        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    hot: true,
 | 
			
		||||
    contentBase: false, // since we use CopyWebpackPlugin.
 | 
			
		||||
    compress: true,
 | 
			
		||||
    host: HOST || config.dev.host,
 | 
			
		||||
    port: PORT || config.dev.port,
 | 
			
		||||
    open: config.dev.autoOpenBrowser,
 | 
			
		||||
    overlay: config.dev.errorOverlay
 | 
			
		||||
      ? { warnings: false, errors: true }
 | 
			
		||||
      : false,
 | 
			
		||||
    publicPath: config.dev.assetsPublicPath,
 | 
			
		||||
    proxy: config.dev.proxyTable,
 | 
			
		||||
    quiet: true, // necessary for FriendlyErrorsPlugin
 | 
			
		||||
    watchOptions: {
 | 
			
		||||
      poll: config.dev.poll,
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    new webpack.DefinePlugin({
 | 
			
		||||
      'process.env': require('../config/dev.env')
 | 
			
		||||
    }),
 | 
			
		||||
    new webpack.HotModuleReplacementPlugin(),
 | 
			
		||||
    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
 | 
			
		||||
    new webpack.NoEmitOnErrorsPlugin(),
 | 
			
		||||
    // https://github.com/ampedandwired/html-webpack-plugin
 | 
			
		||||
    new HtmlWebpackPlugin({
 | 
			
		||||
      filename: 'index.html',
 | 
			
		||||
      template: 'index.html',
 | 
			
		||||
      inject: true
 | 
			
		||||
    }),
 | 
			
		||||
    // copy custom static assets
 | 
			
		||||
    new CopyWebpackPlugin([
 | 
			
		||||
      {
 | 
			
		||||
        from: path.resolve(__dirname, '../static'),
 | 
			
		||||
        to: config.dev.assetsSubDirectory,
 | 
			
		||||
        ignore: ['.*']
 | 
			
		||||
      }
 | 
			
		||||
    ])
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
module.exports = new Promise((resolve, reject) => {
 | 
			
		||||
  portfinder.basePort = process.env.PORT || config.dev.port
 | 
			
		||||
  portfinder.getPort((err, port) => {
 | 
			
		||||
    if (err) {
 | 
			
		||||
      reject(err)
 | 
			
		||||
    } else {
 | 
			
		||||
      // publish the new Port, necessary for e2e tests
 | 
			
		||||
      process.env.PORT = port
 | 
			
		||||
      // add port to devServer config
 | 
			
		||||
      devWebpackConfig.devServer.port = port
 | 
			
		||||
 | 
			
		||||
      // Add FriendlyErrorsPlugin
 | 
			
		||||
      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
 | 
			
		||||
        compilationSuccessInfo: {
 | 
			
		||||
          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
 | 
			
		||||
        },
 | 
			
		||||
        onErrors: config.dev.notifyOnErrors
 | 
			
		||||
        ? utils.createNotifierCallback()
 | 
			
		||||
        : undefined
 | 
			
		||||
      }))
 | 
			
		||||
 | 
			
		||||
      resolve(devWebpackConfig)
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@ -1,145 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const utils = require('./utils')
 | 
			
		||||
const webpack = require('webpack')
 | 
			
		||||
const config = require('../config')
 | 
			
		||||
const merge = require('webpack-merge')
 | 
			
		||||
const baseWebpackConfig = require('./webpack.base.conf')
 | 
			
		||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
 | 
			
		||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
 | 
			
		||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
 | 
			
		||||
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
 | 
			
		||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
 | 
			
		||||
 | 
			
		||||
const env = require('../config/prod.env')
 | 
			
		||||
 | 
			
		||||
const webpackConfig = merge(baseWebpackConfig, {
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: utils.styleLoaders({
 | 
			
		||||
      sourceMap: config.build.productionSourceMap,
 | 
			
		||||
      extract: false,
 | 
			
		||||
      usePostCSS: true
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  devtool: config.build.productionSourceMap ? config.build.devtool : false,
 | 
			
		||||
  output: {
 | 
			
		||||
    path: config.build.assetsRoot,
 | 
			
		||||
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
 | 
			
		||||
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    // http://vuejs.github.io/vue-loader/en/workflow/production.html
 | 
			
		||||
    new webpack.DefinePlugin({
 | 
			
		||||
      'process.env': env
 | 
			
		||||
    }),
 | 
			
		||||
    new UglifyJsPlugin({
 | 
			
		||||
      uglifyOptions: {
 | 
			
		||||
        compress: {
 | 
			
		||||
          warnings: false
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      sourceMap: config.build.productionSourceMap,
 | 
			
		||||
      parallel: true
 | 
			
		||||
    }),
 | 
			
		||||
    // extract css into its own file
 | 
			
		||||
    new ExtractTextPlugin({
 | 
			
		||||
      filename: utils.assetsPath('css/[name].[contenthash].css'),
 | 
			
		||||
      // Setting the following option to `false` will not extract CSS from codesplit chunks.
 | 
			
		||||
      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
 | 
			
		||||
      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
 | 
			
		||||
      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
 | 
			
		||||
      allChunks: true,
 | 
			
		||||
    }),
 | 
			
		||||
    // Compress extracted CSS. We are using this plugin so that possible
 | 
			
		||||
    // duplicated CSS from different components can be deduped.
 | 
			
		||||
    new OptimizeCSSPlugin({
 | 
			
		||||
      cssProcessorOptions: config.build.productionSourceMap
 | 
			
		||||
        ? { safe: true, map: { inline: false } }
 | 
			
		||||
        : { safe: true }
 | 
			
		||||
    }),
 | 
			
		||||
    // generate dist index.html with correct asset hash for caching.
 | 
			
		||||
    // you can customize output by editing /index.html
 | 
			
		||||
    // see https://github.com/ampedandwired/html-webpack-plugin
 | 
			
		||||
    new HtmlWebpackPlugin({
 | 
			
		||||
      filename: config.build.index,
 | 
			
		||||
      template: 'index.html',
 | 
			
		||||
      inject: true,
 | 
			
		||||
      minify: {
 | 
			
		||||
        removeComments: true,
 | 
			
		||||
        collapseWhitespace: true,
 | 
			
		||||
        removeAttributeQuotes: true
 | 
			
		||||
        // more options:
 | 
			
		||||
        // https://github.com/kangax/html-minifier#options-quick-reference
 | 
			
		||||
      },
 | 
			
		||||
      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
 | 
			
		||||
      chunksSortMode: 'dependency'
 | 
			
		||||
    }),
 | 
			
		||||
    // keep module.id stable when vendor modules does not change
 | 
			
		||||
    new webpack.HashedModuleIdsPlugin(),
 | 
			
		||||
    // enable scope hoisting
 | 
			
		||||
    new webpack.optimize.ModuleConcatenationPlugin(),
 | 
			
		||||
    // split vendor js into its own file
 | 
			
		||||
    new webpack.optimize.CommonsChunkPlugin({
 | 
			
		||||
      name: 'vendor',
 | 
			
		||||
      minChunks (module) {
 | 
			
		||||
        // any required modules inside node_modules are extracted to vendor
 | 
			
		||||
        return (
 | 
			
		||||
          module.resource &&
 | 
			
		||||
          /\.js$/.test(module.resource) &&
 | 
			
		||||
          module.resource.indexOf(
 | 
			
		||||
            path.join(__dirname, '../node_modules')
 | 
			
		||||
          ) === 0
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
    }),
 | 
			
		||||
    // extract webpack runtime and module manifest to its own file in order to
 | 
			
		||||
    // prevent vendor hash from being updated whenever app bundle is updated
 | 
			
		||||
    new webpack.optimize.CommonsChunkPlugin({
 | 
			
		||||
      name: 'manifest',
 | 
			
		||||
      minChunks: Infinity
 | 
			
		||||
    }),
 | 
			
		||||
    // This instance extracts shared chunks from code splitted chunks and bundles them
 | 
			
		||||
    // in a separate chunk, similar to the vendor chunk
 | 
			
		||||
    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
 | 
			
		||||
    new webpack.optimize.CommonsChunkPlugin({
 | 
			
		||||
      name: 'app',
 | 
			
		||||
      async: 'vendor-async',
 | 
			
		||||
      children: true,
 | 
			
		||||
      minChunks: 3
 | 
			
		||||
    }),
 | 
			
		||||
 | 
			
		||||
    // copy custom static assets
 | 
			
		||||
    new CopyWebpackPlugin([
 | 
			
		||||
      {
 | 
			
		||||
        from: path.resolve(__dirname, '../static'),
 | 
			
		||||
        to: config.build.assetsSubDirectory,
 | 
			
		||||
        ignore: ['.*']
 | 
			
		||||
      }
 | 
			
		||||
    ])
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if (config.build.productionGzip) {
 | 
			
		||||
  const CompressionWebpackPlugin = require('compression-webpack-plugin')
 | 
			
		||||
 | 
			
		||||
  webpackConfig.plugins.push(
 | 
			
		||||
    new CompressionWebpackPlugin({
 | 
			
		||||
      asset: '[path].gz[query]',
 | 
			
		||||
      algorithm: 'gzip',
 | 
			
		||||
      test: new RegExp(
 | 
			
		||||
        '\\.(' +
 | 
			
		||||
        config.build.productionGzipExtensions.join('|') +
 | 
			
		||||
        ')$'
 | 
			
		||||
      ),
 | 
			
		||||
      threshold: 10240,
 | 
			
		||||
      minRatio: 0.8
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (config.build.bundleAnalyzerReport) {
 | 
			
		||||
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
 | 
			
		||||
  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = webpackConfig
 | 
			
		||||
@ -1,8 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
const merge = require('webpack-merge')
 | 
			
		||||
const prodEnv = require('./prod.env')
 | 
			
		||||
 | 
			
		||||
module.exports = merge(prodEnv, {
 | 
			
		||||
  NODE_ENV: '"development"',
 | 
			
		||||
  BASE_URL:''
 | 
			
		||||
})
 | 
			
		||||
@ -1,84 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
// Template version: 1.3.1
 | 
			
		||||
// see http://vuejs-templates.github.io/webpack for documentation.
 | 
			
		||||
 | 
			
		||||
const path = require('path')
 | 
			
		||||
// const api = 'http://www.baidu.com'
 | 
			
		||||
module.exports = {
 | 
			
		||||
  dev: {
 | 
			
		||||
 | 
			
		||||
    // Paths
 | 
			
		||||
    assetsSubDirectory: 'static',
 | 
			
		||||
    assetsPublicPath: '/',
 | 
			
		||||
    proxyTable: {
 | 
			
		||||
      // '/api': {
 | 
			
		||||
      //   target:api,
 | 
			
		||||
      //   changeOrigin:true,
 | 
			
		||||
      //   pathRewrite:{
 | 
			
		||||
      //     '^/api':''
 | 
			
		||||
      //   }
 | 
			
		||||
      // }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Various Dev Server settings
 | 
			
		||||
    host: 'localhost', // can be overwritten by process.env.HOST
 | 
			
		||||
    port: 10000, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
 | 
			
		||||
    autoOpenBrowser: false,
 | 
			
		||||
    errorOverlay: true,
 | 
			
		||||
    notifyOnErrors: true,
 | 
			
		||||
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
 | 
			
		||||
 | 
			
		||||
    // Use Eslint Loader?
 | 
			
		||||
    // If true, your code will be linted during bundling and
 | 
			
		||||
    // linting errors and warnings will be shown in the console.
 | 
			
		||||
    useEslint: false,
 | 
			
		||||
    // If true, eslint errors and warnings will also be shown in the error overlay
 | 
			
		||||
    // in the browser.
 | 
			
		||||
    showEslintErrorsInOverlay: false,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Source Maps
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    // https://webpack.js.org/configuration/devtool/#development
 | 
			
		||||
    devtool: 'cheap-module-eval-source-map',
 | 
			
		||||
 | 
			
		||||
    // If you have problems debugging vue-files in devtools,
 | 
			
		||||
    // set this to false - it *may* help
 | 
			
		||||
    // https://vue-loader.vuejs.org/en/options.html#cachebusting
 | 
			
		||||
    cacheBusting: true,
 | 
			
		||||
 | 
			
		||||
    cssSourceMap: true
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  build: {
 | 
			
		||||
    // Template for index.html
 | 
			
		||||
    index: path.resolve(__dirname, '../dist/index.html'),
 | 
			
		||||
 | 
			
		||||
    // Paths
 | 
			
		||||
    assetsRoot: path.resolve(__dirname, '../dist'),
 | 
			
		||||
    assetsSubDirectory: 'static',
 | 
			
		||||
    assetsPublicPath: '/',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Source Maps
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    productionSourceMap: true,
 | 
			
		||||
    // https://webpack.js.org/configuration/devtool/#production
 | 
			
		||||
    devtool: '#source-map',
 | 
			
		||||
 | 
			
		||||
    // Gzip off by default as many popular static hosts such as
 | 
			
		||||
    // Surge or Netlify already gzip all static assets for you.
 | 
			
		||||
    // Before setting to `true`, make sure to:
 | 
			
		||||
    // npm install --save-dev compression-webpack-plugin
 | 
			
		||||
    productionGzip: false,
 | 
			
		||||
    productionGzipExtensions: ['js', 'css'],
 | 
			
		||||
 | 
			
		||||
    // Run the build command with an extra argument to
 | 
			
		||||
    // View the bundle analyzer report after build finishes:
 | 
			
		||||
    // `npm run build --report`
 | 
			
		||||
    // Set to `true` or `false` to always turn it on or off
 | 
			
		||||
    bundleAnalyzerReport: process.env.npm_config_report
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
module.exports = {
 | 
			
		||||
  NODE_ENV: '"production"',
 | 
			
		||||
  BASE_URL:'http://www.baidu.com'
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								buyer/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.2 KiB  | 
@ -1,14 +0,0 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
 | 
			
		||||
    <link rel="icon" href="./static/logo.ico" type="image/x-icon">
 | 
			
		||||
    <script src="https://yzf.qq.com/xv/web/static/chat_sdk/yzf_chat.min.js"></script>
 | 
			
		||||
    <title>LILI</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <div id="app"></div>
 | 
			
		||||
    <!-- built files will be auto injected -->
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB  | 
							
								
								
									
										32623
									
								
								buyer/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						@ -1,26 +1,26 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "lilishop-vue",
 | 
			
		||||
  "name": "lilishop",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
 | 
			
		||||
    "start": "npm run dev",
 | 
			
		||||
    "lint": "eslint --ext .js,.vue src",
 | 
			
		||||
    "build": "node build/build.js"
 | 
			
		||||
    "dev": "vue-cli-service serve",
 | 
			
		||||
    "serve": "vue-cli-service serve",
 | 
			
		||||
    "build": "vue-cli-service build"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@amap/amap-jsapi-loader": "0.0.7",
 | 
			
		||||
    "axios": "^0.19.2",
 | 
			
		||||
    "js-cookie": "^2.2.1",
 | 
			
		||||
    "less": "^3.12.2",
 | 
			
		||||
    "less": "^2.7.0",
 | 
			
		||||
    "less-loader": "^5.0.0",
 | 
			
		||||
    "mv-count-down": "^0.1.15",
 | 
			
		||||
    "node-sass": "^4.14.1",
 | 
			
		||||
    "psl": "^1.8.0",
 | 
			
		||||
    "qs": "^6.9.4",
 | 
			
		||||
    "sass-loader": "^7.3.1",
 | 
			
		||||
    "uuid": "^8.3.2",
 | 
			
		||||
    "v-distpicker": "^1.0.17",
 | 
			
		||||
    "view-design": "^4.3.2",
 | 
			
		||||
    "vue": "^2.5.2",
 | 
			
		||||
    "vue": "^2.6.11",
 | 
			
		||||
    "vue-awesome-swiper": "^3.1.3",
 | 
			
		||||
    "vue-piczoom": "^1.0.6",
 | 
			
		||||
    "vue-qr": "^2.3.0",
 | 
			
		||||
@ -28,62 +28,15 @@
 | 
			
		||||
    "vuex": "^3.0.1"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "autoprefixer": "^7.1.2",
 | 
			
		||||
    "babel-core": "^6.22.1",
 | 
			
		||||
    "babel-eslint": "^8.2.1",
 | 
			
		||||
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
 | 
			
		||||
    "babel-loader": "^7.1.1",
 | 
			
		||||
    "babel-plugin-syntax-jsx": "^6.18.0",
 | 
			
		||||
    "babel-plugin-transform-runtime": "^6.22.0",
 | 
			
		||||
    "babel-plugin-transform-vue-jsx": "^3.5.0",
 | 
			
		||||
    "babel-preset-env": "^1.3.2",
 | 
			
		||||
    "babel-preset-stage-2": "^6.22.0",
 | 
			
		||||
    "chalk": "^2.0.1",
 | 
			
		||||
    "copy-webpack-plugin": "^4.0.1",
 | 
			
		||||
    "css-loader": "^0.28.0",
 | 
			
		||||
    "eslint": "^4.15.0",
 | 
			
		||||
    "eslint-config-standard": "^10.2.1",
 | 
			
		||||
    "eslint-friendly-formatter": "^3.0.0",
 | 
			
		||||
    "eslint-loader": "^1.7.1",
 | 
			
		||||
    "eslint-plugin-import": "^2.7.0",
 | 
			
		||||
    "eslint-plugin-node": "^5.2.0",
 | 
			
		||||
    "eslint-plugin-promise": "^3.4.0",
 | 
			
		||||
    "eslint-plugin-standard": "^3.0.1",
 | 
			
		||||
    "eslint-plugin-vue": "^4.0.0",
 | 
			
		||||
    "extract-text-webpack-plugin": "^3.0.0",
 | 
			
		||||
    "file-loader": "^1.1.4",
 | 
			
		||||
    "friendly-errors-webpack-plugin": "^1.6.1",
 | 
			
		||||
    "html-webpack-plugin": "^2.30.1",
 | 
			
		||||
    "node-notifier": "^5.1.2",
 | 
			
		||||
    "node-sass": "^4.14.1",
 | 
			
		||||
    "optimize-css-assets-webpack-plugin": "^3.2.0",
 | 
			
		||||
    "ora": "^1.2.0",
 | 
			
		||||
    "portfinder": "^1.0.13",
 | 
			
		||||
    "postcss-import": "^11.0.0",
 | 
			
		||||
    "postcss-loader": "^2.0.8",
 | 
			
		||||
    "postcss-url": "^7.2.1",
 | 
			
		||||
    "rimraf": "^2.6.0",
 | 
			
		||||
    "@vue/cli-service": "~4.5.0",
 | 
			
		||||
    "compression-webpack-plugin": "^5.0.0",
 | 
			
		||||
    "sass-loader": "^7.3.1",
 | 
			
		||||
    "sass-resources-loader": "^2.0.3",
 | 
			
		||||
    "semver": "^5.3.0",
 | 
			
		||||
    "shelljs": "^0.7.6",
 | 
			
		||||
    "uglifyjs-webpack-plugin": "^1.1.1",
 | 
			
		||||
    "url-loader": "^0.5.8",
 | 
			
		||||
    "vue-loader": "^13.3.0",
 | 
			
		||||
    "vue-style-loader": "^3.0.1",
 | 
			
		||||
    "vue-template-compiler": "^2.5.2",
 | 
			
		||||
    "webpack": "^3.6.0",
 | 
			
		||||
    "webpack-bundle-analyzer": "^2.9.0",
 | 
			
		||||
    "webpack-dev-server": "^2.9.1",
 | 
			
		||||
    "webpack-merge": "^4.1.0"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">= 6.0.0",
 | 
			
		||||
    "npm": ">= 3.0.0"
 | 
			
		||||
    "uglifyjs-webpack-plugin": "^2.2.0",
 | 
			
		||||
    "vue-template-compiler": "^2.6.11"
 | 
			
		||||
  },
 | 
			
		||||
  "browserslist": [
 | 
			
		||||
    "> 1%",
 | 
			
		||||
    "last 2 versions",
 | 
			
		||||
    "not ie <= 8"
 | 
			
		||||
    "not dead"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								buyer/public/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,23 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
			
		||||
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
 | 
			
		||||
    <link rel="icon" href="<%= BASE_URL %>logo.ico">
 | 
			
		||||
    <title><%= htmlWebpackPlugin.options.title %></title>
 | 
			
		||||
    <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
 | 
			
		||||
      <link rel="stylesheet" href="<%=css%>" />
 | 
			
		||||
      <% } %>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
 | 
			
		||||
      <script src="<%=js%>"></script>
 | 
			
		||||
      <% } %>
 | 
			
		||||
    <noscript>
 | 
			
		||||
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
 | 
			
		||||
    </noscript>
 | 
			
		||||
    <div id="app"></div>
 | 
			
		||||
    <!-- built files will be auto injected -->
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								buyer/public/logo.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 19 KiB  | 
| 
		 Before Width: | Height: | Size: 126 KiB  | 
| 
		 Before Width: | Height: | Size: 131 KiB  | 
| 
		 Before Width: | Height: | Size: 302 KiB  | 
| 
		 Before Width: | Height: | Size: 390 KiB After Width: | Height: | Size: 11 KiB  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB  | 
@ -1,89 +1,91 @@
 | 
			
		||||
 | 
			
		||||
// coupon
 | 
			
		||||
.coupon-list {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
.coupon-item {
 | 
			
		||||
  width: 380px;
 | 
			
		||||
  height: 145px;
 | 
			
		||||
  margin-bottom: 20px;
 | 
			
		||||
  margin-right: 10px;
 | 
			
		||||
  margin-left: 10px;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  border: 1px solid #eee;
 | 
			
		||||
  .c-left {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
    >div, > p {
 | 
			
		||||
      margin-bottom: 10px;
 | 
			
		||||
    }
 | 
			
		||||
    >div {
 | 
			
		||||
      .price{
 | 
			
		||||
        color: $theme_color;
 | 
			
		||||
        font-size: 20px;
 | 
			
		||||
      }
 | 
			
		||||
      .describe{
 | 
			
		||||
        background-color: #fff4ec;
 | 
			
		||||
        color: $theme_color;
 | 
			
		||||
        padding: 0 5px;
 | 
			
		||||
        margin-left: 10px;
 | 
			
		||||
        font-size: 13px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    p:nth-of-type(1){
 | 
			
		||||
      font-weight: bold;
 | 
			
		||||
    }
 | 
			
		||||
    p:nth-of-type(2){
 | 
			
		||||
      color: #999;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  b{
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    z-index: 2;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    right: 50px;
 | 
			
		||||
    display: block;
 | 
			
		||||
    width: 3px;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
  }
 | 
			
		||||
  .c-right {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    width: 52px;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background-color: $theme_color;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    font-size: 16px;
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
  }
 | 
			
		||||
  i{
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    right: 42px;
 | 
			
		||||
    width: 380px;
 | 
			
		||||
    height: 145px;
 | 
			
		||||
    margin-bottom: 20px;
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
    margin-left: 10px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    border: 1px solid #eee;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    border-radius: 20px;
 | 
			
		||||
    &:after{
 | 
			
		||||
      content: '';
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      width: 25px;
 | 
			
		||||
      height: 20px;
 | 
			
		||||
      left: -2px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
 | 
			
		||||
    .c-left {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        padding: 20px;
 | 
			
		||||
        > div,
 | 
			
		||||
        > p {
 | 
			
		||||
            margin-bottom: 10px;
 | 
			
		||||
        }
 | 
			
		||||
        > div {
 | 
			
		||||
            .price {
 | 
			
		||||
                color: $theme_color;
 | 
			
		||||
                font-size: 20px;
 | 
			
		||||
            }
 | 
			
		||||
            .describe {
 | 
			
		||||
                background-color: #fff4ec;
 | 
			
		||||
                color: $theme_color;
 | 
			
		||||
                padding: 0 5px;
 | 
			
		||||
                margin-left: 10px;
 | 
			
		||||
                font-size: 13px;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        p:nth-of-type(1) {
 | 
			
		||||
            font-weight: bold;
 | 
			
		||||
        }
 | 
			
		||||
        p:nth-of-type(2) {
 | 
			
		||||
            color: #999;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  i.circle-top{
 | 
			
		||||
    top: -10px;
 | 
			
		||||
    &::after{
 | 
			
		||||
      top: -11px;
 | 
			
		||||
    b {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        z-index: 2;
 | 
			
		||||
        top: 0;
 | 
			
		||||
        right: 50px;
 | 
			
		||||
        display: block;
 | 
			
		||||
        width: 3px;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  i.circle-bottom{
 | 
			
		||||
    bottom: -10px;
 | 
			
		||||
    &::after{
 | 
			
		||||
      bottom: -11px;
 | 
			
		||||
    .c-right {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        right: 0;
 | 
			
		||||
        top: 0;
 | 
			
		||||
        width: 52px;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        background-color: $theme_color;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        font-size: 16px;
 | 
			
		||||
        padding: 20px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
    i {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        width: 20px;
 | 
			
		||||
        height: 20px;
 | 
			
		||||
        right: 42px;
 | 
			
		||||
        border: 1px solid #eee;
 | 
			
		||||
        background-color: #fff;
 | 
			
		||||
        border-radius: 20px;
 | 
			
		||||
        &:after {
 | 
			
		||||
            content: "";
 | 
			
		||||
            position: absolute;
 | 
			
		||||
            width: 25px;
 | 
			
		||||
            height: 20px;
 | 
			
		||||
            left: -2px;
 | 
			
		||||
            background-color: #fff;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    i.circle-top {
 | 
			
		||||
        top: -10px;
 | 
			
		||||
        &::after {
 | 
			
		||||
            top: -11px;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    i.circle-bottom {
 | 
			
		||||
        bottom: -10px;
 | 
			
		||||
        &::after {
 | 
			
		||||
            bottom: -11px;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,18 +1,112 @@
 | 
			
		||||
/*
 | 
			
		||||
 * @Author: LMR
 | 
			
		||||
 * @Date: 2020-08-11 10:12:34
 | 
			
		||||
 * @Last Modified by: LMR
 | 
			
		||||
 * @Last Modified time: 2020-08-18 16:00:10
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//引入主题色
 | 
			
		||||
@import "./theme.scss";
 | 
			
		||||
 | 
			
		||||
.global_color{
 | 
			
		||||
  color: $theme_color;
 | 
			
		||||
 | 
			
		||||
// 明亮主题颜色
 | 
			
		||||
$primary_color: #2d8cf0;
 | 
			
		||||
$primary_light_color: #0f1011;
 | 
			
		||||
$primary_dark_color: #2b85e4;
 | 
			
		||||
$success_color: #19be6b;
 | 
			
		||||
$warning_color: #ff9900;
 | 
			
		||||
$error_color: #ed3f14;
 | 
			
		||||
$handle-btn-color: #438cde;
 | 
			
		||||
 | 
			
		||||
$theme_color: #ed3f14;
 | 
			
		||||
 | 
			
		||||
$border_color: #dddee1;
 | 
			
		||||
$title_color: #8c8c8c;
 | 
			
		||||
$light_title_color: #1c2438;
 | 
			
		||||
$light_content_color: #495060;
 | 
			
		||||
$light_sub_color: #80848f;
 | 
			
		||||
$light_background_color: #f8f8f9;
 | 
			
		||||
$light_white_background_color: #fff;
 | 
			
		||||
// 暗黑主题颜色
 | 
			
		||||
$dark_background_color: #141414;
 | 
			
		||||
$dark_sub_background_color: #1d1d1d; //稍微浅一点的
 | 
			
		||||
$dark_content_color: #d5d5d5;
 | 
			
		||||
 | 
			
		||||
/***** 封装一些方法可用于 黑暗主题 ,明亮主题 *****/
 | 
			
		||||
 | 
			
		||||
// 背景颜色
 | 
			
		||||
@mixin background_color($color) {
 | 
			
		||||
    /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
    background-color: $color;
 | 
			
		||||
    transition: 0.35s;
 | 
			
		||||
    [data-theme="dark"] & {
 | 
			
		||||
        background-color: $dark_background_color;
 | 
			
		||||
    }
 | 
			
		||||
    [data-theme="light"] & {
 | 
			
		||||
        background-color: $light_background_color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
.global_background_color{
 | 
			
		||||
  background-color: $theme_color;
 | 
			
		||||
// 辅助背景颜色
 | 
			
		||||
@mixin sub_background_color($color) {
 | 
			
		||||
    /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
    background-color: $color;
 | 
			
		||||
    transition: 0.35s;
 | 
			
		||||
    [data-theme="dark"] & {
 | 
			
		||||
        background-color: $dark_sub_background_color;
 | 
			
		||||
    }
 | 
			
		||||
    [data-theme="light"] & {
 | 
			
		||||
        background-color: $light_background_color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@mixin white_background_color() {
 | 
			
		||||
    /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
    background-color: $light_white_background_color;
 | 
			
		||||
    transition: 0.35s;
 | 
			
		||||
    [data-theme="dark"] & {
 | 
			
		||||
        background-color: $dark_sub_background_color;
 | 
			
		||||
    }
 | 
			
		||||
    [data-theme="light"] & {
 | 
			
		||||
        background-color: $light_white_background_color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 正文颜色
 | 
			
		||||
@mixin content_color($color) {
 | 
			
		||||
    /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
    color: $color;
 | 
			
		||||
    [data-theme="dark"] & {
 | 
			
		||||
        color: $dark_content_color;
 | 
			
		||||
    }
 | 
			
		||||
    [data-theme="light"] & {
 | 
			
		||||
        color: $light_content_color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 辅助颜色
 | 
			
		||||
@mixin sub_color($color) {
 | 
			
		||||
    /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
    color: $color;
 | 
			
		||||
    [data-theme="dark"] & {
 | 
			
		||||
        color: $dark_content_color;
 | 
			
		||||
    }
 | 
			
		||||
    [data-theme="light"] & {
 | 
			
		||||
        color: $light_sub_color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 标题颜色
 | 
			
		||||
@mixin title_color($color) {
 | 
			
		||||
    /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
    color: $color;
 | 
			
		||||
    [data-theme="dark"] & {
 | 
			
		||||
        color: $dark_content_color;
 | 
			
		||||
    }
 | 
			
		||||
    [data-theme="light"] & {
 | 
			
		||||
        color: $light_title_color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 全局变量
 | 
			
		||||
.global_color {
 | 
			
		||||
    color: $theme_color;
 | 
			
		||||
}
 | 
			
		||||
.global_background_color {
 | 
			
		||||
    background-color: $theme_color;
 | 
			
		||||
}
 | 
			
		||||
.global_text_left {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
@ -26,44 +120,96 @@
 | 
			
		||||
.global_float_right {
 | 
			
		||||
    float: right;
 | 
			
		||||
}
 | 
			
		||||
.clearfix::after{
 | 
			
		||||
    content: '';
 | 
			
		||||
.clearfix::after {
 | 
			
		||||
    content: "";
 | 
			
		||||
    display: block;
 | 
			
		||||
    clear: both;
 | 
			
		||||
}
 | 
			
		||||
.width_1200{width: 1200px;}
 | 
			
		||||
.width_800{width: 800px;}
 | 
			
		||||
.width_400{width: 400px;}
 | 
			
		||||
.width_300{width: 300px;}
 | 
			
		||||
.width_200{width: 200px;}
 | 
			
		||||
.width_100{width: 100px;}
 | 
			
		||||
.width_1200 {
 | 
			
		||||
    width: 1200px;
 | 
			
		||||
}
 | 
			
		||||
.width_800 {
 | 
			
		||||
    width: 800px;
 | 
			
		||||
}
 | 
			
		||||
.width_400 {
 | 
			
		||||
    width: 400px;
 | 
			
		||||
}
 | 
			
		||||
.width_300 {
 | 
			
		||||
    width: 300px;
 | 
			
		||||
}
 | 
			
		||||
.width_200 {
 | 
			
		||||
    width: 200px;
 | 
			
		||||
}
 | 
			
		||||
.width_100 {
 | 
			
		||||
    width: 100px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fontsize_12{font-size: 12px;}
 | 
			
		||||
.fontsize_14{font-size: 14px;}
 | 
			
		||||
.fontsize_16{font-size: 16px;}
 | 
			
		||||
.fontsize_18{font-size: 18px;}
 | 
			
		||||
.fontsize_12 {
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
}
 | 
			
		||||
.fontsize_14 {
 | 
			
		||||
    font-size: 14px;
 | 
			
		||||
}
 | 
			
		||||
.fontsize_16 {
 | 
			
		||||
    font-size: 16px;
 | 
			
		||||
}
 | 
			
		||||
.fontsize_18 {
 | 
			
		||||
    font-size: 18px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mb_20{margin-bottom: 20px;}
 | 
			
		||||
.mt_20{margin-top: 20px;}
 | 
			
		||||
.ml_20{margin-left: 20px;}
 | 
			
		||||
.mr_20{margin-right: 20px;}
 | 
			
		||||
.mb_20 {
 | 
			
		||||
    margin-bottom: 20px;
 | 
			
		||||
}
 | 
			
		||||
.mt_20 {
 | 
			
		||||
    margin-top: 20px;
 | 
			
		||||
}
 | 
			
		||||
.ml_20 {
 | 
			
		||||
    margin-left: 20px;
 | 
			
		||||
}
 | 
			
		||||
.mr_20 {
 | 
			
		||||
    margin-right: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mb_10{margin-bottom: 10px;}
 | 
			
		||||
.mt_10{margin-top: 10px;}
 | 
			
		||||
.ml_10{margin-left: 10px;}
 | 
			
		||||
.mr_10{margin-right: 10px;}
 | 
			
		||||
.mb_10 {
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
.mt_10 {
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
}
 | 
			
		||||
.ml_10 {
 | 
			
		||||
    margin-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
.mr_10 {
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pb_20{padding-bottom: 20px;}
 | 
			
		||||
.pt_20{padding-top: 20px;}
 | 
			
		||||
.pl_20{padding-left: 20px;}
 | 
			
		||||
.pr_20{padding-right: 20px;}
 | 
			
		||||
.pb_20 {
 | 
			
		||||
    padding-bottom: 20px;
 | 
			
		||||
}
 | 
			
		||||
.pt_20 {
 | 
			
		||||
    padding-top: 20px;
 | 
			
		||||
}
 | 
			
		||||
.pl_20 {
 | 
			
		||||
    padding-left: 20px;
 | 
			
		||||
}
 | 
			
		||||
.pr_20 {
 | 
			
		||||
    padding-right: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pb_10{padding-bottom: 10px;}
 | 
			
		||||
.pt_10{padding-top: 10px;}
 | 
			
		||||
.pl_10{padding-left: 10px;}
 | 
			
		||||
.pr_10{padding-right: 10px;}
 | 
			
		||||
.pb_10 {
 | 
			
		||||
    padding-bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pt_10 {
 | 
			
		||||
    padding-top: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pl_10 {
 | 
			
		||||
    padding-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pr_10 {
 | 
			
		||||
    padding-right: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.color999{
 | 
			
		||||
.color999 {
 | 
			
		||||
    color: #999;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -71,55 +217,123 @@ html,
 | 
			
		||||
body {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
 | 
			
		||||
    font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial,
 | 
			
		||||
        sans-serif;
 | 
			
		||||
    // overflow: hidden;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
li{
 | 
			
		||||
li {
 | 
			
		||||
    list-style: none;
 | 
			
		||||
}
 | 
			
		||||
.hover-color:hover{
 | 
			
		||||
    color: $theme_color!important;
 | 
			
		||||
.hover-color:hover {
 | 
			
		||||
    color: $theme_color !important;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.hover-pointer{
 | 
			
		||||
.hover-pointer {
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.center{
 | 
			
		||||
.center {
 | 
			
		||||
    margin: 0 auto;
 | 
			
		||||
}
 | 
			
		||||
.relative{
 | 
			
		||||
.relative {
 | 
			
		||||
    position: relative;
 | 
			
		||||
}
 | 
			
		||||
.ellipsis{
 | 
			
		||||
.ellipsis {
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    text-overflow:ellipsis;
 | 
			
		||||
    text-overflow: ellipsis;
 | 
			
		||||
    white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
.promotion-decorate{
 | 
			
		||||
.promotion-decorate {
 | 
			
		||||
    width: 200px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    font-size: 25px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    margin: 30px auto 30px;
 | 
			
		||||
    &::before,&::after{
 | 
			
		||||
      content: '';
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      width: 25px;
 | 
			
		||||
      height: 20px;
 | 
			
		||||
      background-size: 50px 20px;
 | 
			
		||||
      background-repeat: no-repeat;
 | 
			
		||||
      background-position: 0 0;
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: 10px;
 | 
			
		||||
      left: -3px;
 | 
			
		||||
    &::before,
 | 
			
		||||
    &::after {
 | 
			
		||||
        content: "";
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 25px;
 | 
			
		||||
        height: 20px;
 | 
			
		||||
        background-size: 50px 20px;
 | 
			
		||||
        background-repeat: no-repeat;
 | 
			
		||||
        background-position: 0 0;
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        top: 10px;
 | 
			
		||||
        left: -3px;
 | 
			
		||||
    }
 | 
			
		||||
    &::after{
 | 
			
		||||
      background-position: -24px 0;
 | 
			
		||||
      right: -3px;
 | 
			
		||||
      left: auto;
 | 
			
		||||
    &::after {
 | 
			
		||||
        background-position: -24px 0;
 | 
			
		||||
        right: -3px;
 | 
			
		||||
        left: auto;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//  goodsList
 | 
			
		||||
 | 
			
		||||
.text-danger {
 | 
			
		||||
    color: $theme_color;
 | 
			
		||||
  }
 | 
			
		||||
  .seckill-price{
 | 
			
		||||
    margin-right: 5px;
 | 
			
		||||
    font-size: 25px;
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-list {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
    width: 1200px;
 | 
			
		||||
    margin: 0 auto;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-info {
 | 
			
		||||
    width: 235px;
 | 
			
		||||
    padding: 6px;
 | 
			
		||||
    margin: 10px 0px;
 | 
			
		||||
    margin-left: 5px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    border: 1px solid #fff;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-info:hover {
 | 
			
		||||
    border: 1px solid #ccc;
 | 
			
		||||
    box-shadow: 0px 0px 15px #ccc;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-price {
 | 
			
		||||
    margin-top: 6px;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-detail {
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    margin: 6px 0px;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-num {
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    margin-bottom: 6px;
 | 
			
		||||
    color: #666;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-num {
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    margin-bottom: 6px;
 | 
			
		||||
    color: #009688;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-num span {
 | 
			
		||||
    color: #005aa0;
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-show-seller {
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    color: $theme_color;
 | 
			
		||||
  }
 | 
			
		||||
  .goods-page {
 | 
			
		||||
    margin:10px auto ;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    width: 1200px;
 | 
			
		||||
  }
 | 
			
		||||
@ -6,79 +6,4 @@
 | 
			
		||||
@table-thead-bg               : #f8f8f9;
 | 
			
		||||
@table-td-stripe-bg           : #f8f8f9;
 | 
			
		||||
@table-td-hover-bg            : #ededed;
 | 
			
		||||
@table-td-highlight-bg        : #ededed;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
//.colorPaletteMixin() {
 | 
			
		||||
//  @functions: ~`(function() {
 | 
			
		||||
//  var hueStep = 2;
 | 
			
		||||
//  var saturationStep = 0.16;
 | 
			
		||||
//  var saturationStep2 = 0.05;
 | 
			
		||||
//  var brightnessStep1 = 0.05;
 | 
			
		||||
//  var brightnessStep2 = 0.15;
 | 
			
		||||
//  var lightColorCount = 5;
 | 
			
		||||
//  var darkColorCount = 4;
 | 
			
		||||
//
 | 
			
		||||
//  var getHue = function(hsv, i, isLight) {
 | 
			
		||||
//    var hue;
 | 
			
		||||
//    if (hsv.h >= 60 && hsv.h <= 240) {
 | 
			
		||||
//      hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i;
 | 
			
		||||
//    } else {
 | 
			
		||||
//      hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i;
 | 
			
		||||
//    }
 | 
			
		||||
//    if (hue < 0) {
 | 
			
		||||
//      hue += 360;
 | 
			
		||||
//    } else if (hue >= 360) {
 | 
			
		||||
//      hue -= 360;
 | 
			
		||||
//    }
 | 
			
		||||
//    return Math.round(hue);
 | 
			
		||||
//  };
 | 
			
		||||
//  var getSaturation = function(hsv, i, isLight) {
 | 
			
		||||
//    var saturation;
 | 
			
		||||
//    if (isLight) {
 | 
			
		||||
//      saturation = hsv.s - saturationStep * i;
 | 
			
		||||
//    } else if (i === darkColorCount) {
 | 
			
		||||
//      saturation = hsv.s + saturationStep;
 | 
			
		||||
//    } else {
 | 
			
		||||
//      saturation = hsv.s + saturationStep2 * i;
 | 
			
		||||
//    }
 | 
			
		||||
//    if (saturation > 1) {
 | 
			
		||||
//      saturation = 1;
 | 
			
		||||
//    }
 | 
			
		||||
//    if (isLight && i === lightColorCount && saturation > 0.1) {
 | 
			
		||||
//      saturation = 0.1;
 | 
			
		||||
//    }
 | 
			
		||||
//    if (saturation < 0.06) {
 | 
			
		||||
//      saturation = 0.06;
 | 
			
		||||
//    }
 | 
			
		||||
//    return Number(saturation.toFixed(2));
 | 
			
		||||
//  };
 | 
			
		||||
//  var getValue = function(hsv, i, isLight) {
 | 
			
		||||
//    var value;
 | 
			
		||||
//    if (isLight) {
 | 
			
		||||
//      value = hsv.v + brightnessStep1 * i;
 | 
			
		||||
//    }else{
 | 
			
		||||
//      value = hsv.v - brightnessStep2 * i
 | 
			
		||||
//    }
 | 
			
		||||
//    if (value > 1) {
 | 
			
		||||
//      value = 1;
 | 
			
		||||
//    }
 | 
			
		||||
//    return Number(value.toFixed(2))
 | 
			
		||||
//  };
 | 
			
		||||
//
 | 
			
		||||
//  this.colorPalette = function(color, index) {
 | 
			
		||||
//    var isLight = index <= 6;
 | 
			
		||||
//    var hsv = tinycolor(color).toHsv();
 | 
			
		||||
//    var i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1;
 | 
			
		||||
//    return tinycolor({
 | 
			
		||||
//      h: getHue(hsv, i, isLight),
 | 
			
		||||
//      s: getSaturation(hsv, i, isLight),
 | 
			
		||||
//      v: getValue(hsv, i, isLight),
 | 
			
		||||
//    }).toHexString();
 | 
			
		||||
//  };
 | 
			
		||||
//})()`;
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
//.colorPaletteMixin();
 | 
			
		||||
@table-td-highlight-bg        : #ededed;
 | 
			
		||||
@ -1,114 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * @Author: LMR
 | 
			
		||||
 * @Date: 2020-08-14 11:04:12
 | 
			
		||||
 * @Last Modified by: LMR
 | 
			
		||||
 * @Last Modified time: 2020-08-18 14:21:41
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 主题颜色
 | 
			
		||||
 | 
			
		||||
// 明亮主题颜色
 | 
			
		||||
$primary_color: #2d8cf0;
 | 
			
		||||
$primary_light_color: #0f1011;
 | 
			
		||||
$primary_dark_color: #2b85e4;
 | 
			
		||||
$success_color: #19be6b;
 | 
			
		||||
$warning_color: #ff9900;
 | 
			
		||||
$error_color: #ed3f14;
 | 
			
		||||
$handle-btn-color: #438cde;
 | 
			
		||||
 | 
			
		||||
$theme_color: #ed3f14;
 | 
			
		||||
 | 
			
		||||
$border_color: #dddee1;
 | 
			
		||||
$title_color: #8c8c8c;
 | 
			
		||||
$light_title_color: #1c2438;
 | 
			
		||||
$light_content_color: #495060;
 | 
			
		||||
$light_sub_color: #80848f;
 | 
			
		||||
$light_background_color: #f8f8f9;
 | 
			
		||||
$light_white_background_color :#fff;
 | 
			
		||||
// 暗黑主题颜色
 | 
			
		||||
$dark_background_color: #141414;
 | 
			
		||||
$dark_sub_background_color: #1d1d1d; //稍微浅一点的
 | 
			
		||||
$dark_content_color: #d5d5d5;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***** 封装一些方法可用于 黑暗主题 ,明亮主题 *****/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 背景颜色
 | 
			
		||||
@mixin background_color($color) {
 | 
			
		||||
  /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
  background-color: $color;
 | 
			
		||||
  transition: 0.35s;
 | 
			
		||||
  [data-theme="dark"] & {
 | 
			
		||||
    background-color: $dark_background_color;
 | 
			
		||||
  }
 | 
			
		||||
  [data-theme="light"] & {
 | 
			
		||||
    background-color: $light_background_color;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
// 辅助背景颜色
 | 
			
		||||
@mixin sub_background_color($color) {
 | 
			
		||||
  /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
  background-color: $color;
 | 
			
		||||
  transition: 0.35s;
 | 
			
		||||
  [data-theme="dark"] & {
 | 
			
		||||
    background-color: $dark_sub_background_color;
 | 
			
		||||
  }
 | 
			
		||||
  [data-theme="light"] & {
 | 
			
		||||
    background-color: $light_background_color;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@mixin white_background_color() {
 | 
			
		||||
  /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
  background-color: $light_white_background_color;
 | 
			
		||||
  transition: 0.35s;
 | 
			
		||||
  [data-theme="dark"] & {
 | 
			
		||||
    background-color: $dark_sub_background_color;
 | 
			
		||||
  }
 | 
			
		||||
  [data-theme="light"] & {
 | 
			
		||||
    background-color: $light_white_background_color;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 正文颜色
 | 
			
		||||
@mixin content_color($color) {
 | 
			
		||||
  /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
  color: $color;
 | 
			
		||||
  [data-theme="dark"] & {
 | 
			
		||||
    color: $dark_content_color;
 | 
			
		||||
  }
 | 
			
		||||
  [data-theme="light"] & {
 | 
			
		||||
    color: $light_content_color;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 辅助颜色
 | 
			
		||||
@mixin sub_color($color) {
 | 
			
		||||
  /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
  color: $color;
 | 
			
		||||
  [data-theme="dark"] & {
 | 
			
		||||
    color: $dark_content_color;
 | 
			
		||||
  }
 | 
			
		||||
  [data-theme="light"] & {
 | 
			
		||||
    color: $light_sub_color;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 标题颜色
 | 
			
		||||
@mixin title_color($color) {
 | 
			
		||||
  /*通过该函数设置字体颜色,后期方便统一管理;*/
 | 
			
		||||
  color: $color;
 | 
			
		||||
  [data-theme="dark"] & {
 | 
			
		||||
    color: $dark_content_color;
 | 
			
		||||
  }
 | 
			
		||||
  [data-theme="light"] & {
 | 
			
		||||
    color: $light_title_color;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -157,6 +157,6 @@ export default {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  height: 0px;
 | 
			
		||||
  top: -38px;
 | 
			
		||||
  left: 336px;
 | 
			
		||||
  left: 339px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -35,6 +35,6 @@ export default {
 | 
			
		||||
}
 | 
			
		||||
p {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  @include sub_color($light_sub_color);
 | 
			
		||||
 
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -346,7 +346,7 @@ export default {
 | 
			
		||||
}
 | 
			
		||||
.inventory {
 | 
			
		||||
  padding-left: 4px;
 | 
			
		||||
  @include sub_color($light_sub_color);
 | 
			
		||||
 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.global_color {
 | 
			
		||||
@ -597,6 +597,9 @@ export default {
 | 
			
		||||
 | 
			
		||||
.add-buy-car {
 | 
			
		||||
  margin-top: 15px;
 | 
			
		||||
  >*{
 | 
			
		||||
    margin: 0 4px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.goodsConfig {
 | 
			
		||||
 | 
			
		||||
@ -421,9 +421,6 @@ export default {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    img:hover{
 | 
			
		||||
      cursor: url(require('../../../static/small.cur')),auto;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,10 +17,10 @@
 | 
			
		||||
        </li>
 | 
			
		||||
        <li v-show="!!userInfo.username">
 | 
			
		||||
          <div class="username-p">
 | 
			
		||||
            <p>
 | 
			
		||||
            <div>
 | 
			
		||||
              <Avatar class="person-icon" :src="userInfo.face" icon="person" size="small" />
 | 
			
		||||
              <span class="username">{{ userInfo.nickName? userInfo.nickName : userInfo.username | secrecyMobile }}</span>
 | 
			
		||||
            </p>
 | 
			
		||||
            </div>
 | 
			
		||||
            <transition name='fade'>
 | 
			
		||||
              <ul class="drop-items">
 | 
			
		||||
                <li @click="goUserCenter('/home')">我的主页</li>
 | 
			
		||||
@ -184,7 +184,7 @@ export default {
 | 
			
		||||
.first,
 | 
			
		||||
.username,
 | 
			
		||||
.shopping-cart-null span {
 | 
			
		||||
  @include sub_color($light_sub_color);
 | 
			
		||||
 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.box {
 | 
			
		||||
@ -308,8 +308,11 @@ export default {
 | 
			
		||||
}
 | 
			
		||||
.username-p {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  p{
 | 
			
		||||
  div{
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    >span{
 | 
			
		||||
      margin-left: 5px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .drop-items {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
 | 
			
		||||
@ -152,15 +152,7 @@ export default {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
/** 限时秒杀 */
 | 
			
		||||
.limit-img {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: row;
 | 
			
		||||
  img {
 | 
			
		||||
    width: 300px;
 | 
			
		||||
    height: 100px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 折扣广告 */
 | 
			
		||||
.discountAdvert {
 | 
			
		||||
  width: 1300px;
 | 
			
		||||
@ -173,7 +165,7 @@ export default {
 | 
			
		||||
  padding-left: 295px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
  align-items: start;
 | 
			
		||||
  align-items: flex-start;
 | 
			
		||||
  img {
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
@ -185,16 +177,6 @@ export default {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 装修模态框 内部样式start */
 | 
			
		||||
.modal-top-advert {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  > * {
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.width_1200_auto{
 | 
			
		||||
  width: 1200px;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ import App from './App';
 | 
			
		||||
import router from './router';
 | 
			
		||||
import ViewUI from 'view-design';
 | 
			
		||||
import './assets/styles/theme.less';
 | 
			
		||||
import './assets/iconfont/iconfont.css';
 | 
			
		||||
// import './assets/iconfont/iconfont.css';
 | 
			
		||||
import * as filters from './plugins/filters';
 | 
			
		||||
import store from '@/vuex/store'
 | 
			
		||||
import storage from '@/plugins/storage';
 | 
			
		||||
@ -47,9 +47,7 @@ Vue.prototype.connectCs = function (sign = '37ef9b97807d03c6741298ed4eb5b536d2d2
 | 
			
		||||
Vue.prototype.Cookies = storage
 | 
			
		||||
/* eslint-disable no-new */
 | 
			
		||||
new Vue({
 | 
			
		||||
  el: '#app',
 | 
			
		||||
  router,
 | 
			
		||||
  store,
 | 
			
		||||
  components: { App },
 | 
			
		||||
  template: '<App/>'
 | 
			
		||||
});
 | 
			
		||||
  render: h => h(App)
 | 
			
		||||
}).$mount("#app")
 | 
			
		||||
 | 
			
		||||
@ -41,23 +41,23 @@
 | 
			
		||||
        class="goods-show-info"
 | 
			
		||||
        v-for="(item, index) in goodsList"
 | 
			
		||||
        :key="index"
 | 
			
		||||
        @click="goGoodsDetail(item.id, item.goodsId)"
 | 
			
		||||
        @click="goGoodsDetail(item.content.id, item.content.goodsId)"
 | 
			
		||||
      >
 | 
			
		||||
        <div class="goods-show-img">
 | 
			
		||||
          <img width="220" height="220" :src="item.thumbnail" />
 | 
			
		||||
          <img width="220" height="220" :src="item.content.thumbnail" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="goods-show-price">
 | 
			
		||||
          <span>
 | 
			
		||||
            <span class="seckill-price text-danger">{{
 | 
			
		||||
              item.price | unitPrice("¥")
 | 
			
		||||
              item.content.price | unitPrice("¥")
 | 
			
		||||
            }}</span>
 | 
			
		||||
          </span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="goods-show-detail">
 | 
			
		||||
          <span>{{ item.goodsName }}</span>
 | 
			
		||||
          <span>{{ item.content.goodsName }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="goods-show-num">
 | 
			
		||||
          已有<span>{{ item.commentNum || 0 }}</span>人评价
 | 
			
		||||
          已有<span>{{ item.content.commentNum || 0 }}</span>人评价
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -237,6 +237,6 @@ export default {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.promotion-decorate::before,.promotion-decorate::after{
 | 
			
		||||
  background-image: url('../../static/sprite@2x.png');
 | 
			
		||||
  background-image: url('/src/assets/images/sprite@2x.png');
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -342,7 +342,7 @@ export default {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
.subTips {
 | 
			
		||||
  @include sub_color($light_sub_color);
 | 
			
		||||
 
 | 
			
		||||
}
 | 
			
		||||
.fontsize_48 {
 | 
			
		||||
  font-size: 48px;
 | 
			
		||||
 | 
			
		||||
@ -110,7 +110,7 @@ export default {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.address-content-title {
 | 
			
		||||
  @include sub_color($light_sub_color);
 | 
			
		||||
 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.address-action span {
 | 
			
		||||
 | 
			
		||||
@ -496,7 +496,7 @@ export default {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
.subTips {
 | 
			
		||||
  @include sub_color($light_sub_color);
 | 
			
		||||
 
 | 
			
		||||
}
 | 
			
		||||
.account-btns {
 | 
			
		||||
  margin: 10px 0;
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ export default {
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
<style scoped lang='scss'>
 | 
			
		||||
.pay-done-box {
 | 
			
		||||
  margin: 100px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
@ -31,5 +31,8 @@ export default {
 | 
			
		||||
.pay-btn{
 | 
			
		||||
  width: 300px;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  >*{
 | 
			
		||||
    margin:0 4px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -285,6 +285,9 @@ export default {
 | 
			
		||||
 | 
			
		||||
.add-buy-car {
 | 
			
		||||
  margin-top: 15px;
 | 
			
		||||
  >*{
 | 
			
		||||
    margin: 0 4px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.item-select {
 | 
			
		||||
  display: flex;
 | 
			
		||||
 | 
			
		||||
@ -150,7 +150,7 @@ export default {
 | 
			
		||||
  justify-content: flex-end;
 | 
			
		||||
}
 | 
			
		||||
.promotion-decorate::before,.promotion-decorate::after{
 | 
			
		||||
  background-image: url('../../../static/sprite@2x.png');
 | 
			
		||||
  background-image: url('/src/assets/images/sprite@2x.png');
 | 
			
		||||
}
 | 
			
		||||
.cate-select-con{
 | 
			
		||||
  display: block;
 | 
			
		||||
 | 
			
		||||
@ -164,7 +164,7 @@ export default {
 | 
			
		||||
  background-color: #666;
 | 
			
		||||
}
 | 
			
		||||
.promotion-decorate::before,.promotion-decorate::after{
 | 
			
		||||
  background-image: url('../../../static/sprite@2x.png');
 | 
			
		||||
  background-image: url('/src/assets/images/sprite@2x.png');
 | 
			
		||||
}
 | 
			
		||||
.time-line{
 | 
			
		||||
  width: 1200px;
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
  <div class="shop-entry">
 | 
			
		||||
    <div style="height: 20px"></div>
 | 
			
		||||
    <div class="content">
 | 
			
		||||
      <h3>店铺入驻</h3>
 | 
			
		||||
      <h1>店铺入驻</h1>
 | 
			
		||||
      <Steps :current="currentIndex" class="margin">
 | 
			
		||||
        <Step title="企业资质信息"></Step>
 | 
			
		||||
        <Step title="财务资质信息"></Step>
 | 
			
		||||
@ -22,7 +22,8 @@
 | 
			
		||||
        <span v-if="storeDisable == 'REFUSED'">审核未通过,请修改资质信息,如有疑问请联系管理员</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <Button v-if="currentIndex === 3" @click="$router.push('/')">返回</Button>
 | 
			
		||||
      <Button type="primary" @click='currentIndex = 0' v-if="storeDisable === 'REFUSED' && currentIndex === 3">重新申请</Button>
 | 
			
		||||
      <Button type="primary" @click='currentIndex = 0'
 | 
			
		||||
        v-if="storeDisable === 'REFUSED' && currentIndex === 3">重新申请</Button>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <Modal title="店铺入驻协议" v-model="showAgreement" width="1200" :closable="false" :mask-closable="false">
 | 
			
		||||
@ -38,37 +39,38 @@
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { agreement, applyStatus } from '@/api/shopentry';
 | 
			
		||||
import firstApply from './FirstApply';
 | 
			
		||||
import secondApply from './SecondApply';
 | 
			
		||||
import thirdApply from './ThirdApply';
 | 
			
		||||
import { agreement, applyStatus } from "@/api/shopentry";
 | 
			
		||||
import firstApply from "./FirstApply";
 | 
			
		||||
import secondApply from "./SecondApply";
 | 
			
		||||
import thirdApply from "./ThirdApply";
 | 
			
		||||
export default {
 | 
			
		||||
  components: {
 | 
			
		||||
    firstApply,
 | 
			
		||||
    secondApply,
 | 
			
		||||
    thirdApply
 | 
			
		||||
    thirdApply,
 | 
			
		||||
  },
 | 
			
		||||
  data () {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      currentIndex: 0, // 当前步骤
 | 
			
		||||
      showAgreement: false, // 协议显示
 | 
			
		||||
      agreementCon: '', // 协议内容
 | 
			
		||||
      agreementCon: "", // 协议内容
 | 
			
		||||
      checked: false, // 选中协议
 | 
			
		||||
      firstData: {}, // 第一步数据
 | 
			
		||||
      secondData: {}, // 第二步数据
 | 
			
		||||
      thirdData: {}, // 第三步数据
 | 
			
		||||
      storeDisable: '', // APPLY OPEN 开店中 CLOSED 关闭 REFUSED 拒绝 APPLYING 申请中,审核
 | 
			
		||||
      dataReview: true // 根据接口返回判断是否可展示数据
 | 
			
		||||
      storeDisable: "", // APPLY OPEN 开店中 CLOSED 关闭 REFUSED 拒绝 APPLYING 申请中,审核
 | 
			
		||||
      dataReview: true, // 根据接口返回判断是否可展示数据
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getArticle () {
 | 
			
		||||
    getArticle() {
 | 
			
		||||
      // 入驻协议
 | 
			
		||||
      agreement().then((res) => {
 | 
			
		||||
        this.agreementCon = res.result.content;
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    getData (status) { // 获取已填写店铺信息
 | 
			
		||||
    getData(status) {
 | 
			
		||||
      // 获取已填写店铺信息
 | 
			
		||||
      applyStatus().then((res) => {
 | 
			
		||||
        if (res.success) {
 | 
			
		||||
          if (!res.result) {
 | 
			
		||||
@ -77,38 +79,38 @@ export default {
 | 
			
		||||
            this.dataReview = false;
 | 
			
		||||
            let data = res.result;
 | 
			
		||||
            let first = [
 | 
			
		||||
              'companyAddressPath',
 | 
			
		||||
              'companyAddress',
 | 
			
		||||
              'companyAddressIdPath',
 | 
			
		||||
              'companyEmail',
 | 
			
		||||
              'companyName',
 | 
			
		||||
              'employeeNum',
 | 
			
		||||
              'companyPhone',
 | 
			
		||||
              'legalId',
 | 
			
		||||
              'legalName',
 | 
			
		||||
              'licencePhoto',
 | 
			
		||||
              'legalPhoto',
 | 
			
		||||
              'licenseNum',
 | 
			
		||||
              'linkName',
 | 
			
		||||
              'linkPhone',
 | 
			
		||||
              'registeredCapital',
 | 
			
		||||
              'scope'
 | 
			
		||||
              "companyAddressPath",
 | 
			
		||||
              "companyAddress",
 | 
			
		||||
              "companyAddressIdPath",
 | 
			
		||||
              "companyEmail",
 | 
			
		||||
              "companyName",
 | 
			
		||||
              "employeeNum",
 | 
			
		||||
              "companyPhone",
 | 
			
		||||
              "legalId",
 | 
			
		||||
              "legalName",
 | 
			
		||||
              "licencePhoto",
 | 
			
		||||
              "legalPhoto",
 | 
			
		||||
              "licenseNum",
 | 
			
		||||
              "linkName",
 | 
			
		||||
              "linkPhone",
 | 
			
		||||
              "registeredCapital",
 | 
			
		||||
              "scope",
 | 
			
		||||
            ];
 | 
			
		||||
            let second = [
 | 
			
		||||
              'settlementBankAccountName',
 | 
			
		||||
              'settlementBankAccountNum',
 | 
			
		||||
              'settlementBankBranchName',
 | 
			
		||||
              'settlementBankJointName'
 | 
			
		||||
              "settlementBankAccountName",
 | 
			
		||||
              "settlementBankAccountNum",
 | 
			
		||||
              "settlementBankBranchName",
 | 
			
		||||
              "settlementBankJointName",
 | 
			
		||||
            ];
 | 
			
		||||
            let third = [
 | 
			
		||||
              'goodsManagementCategory',
 | 
			
		||||
              'storeCenter',
 | 
			
		||||
              'storeDesc',
 | 
			
		||||
              'storeLogo',
 | 
			
		||||
              'storeName',
 | 
			
		||||
              'storeAddressIdPath',
 | 
			
		||||
              'storeAddressPath',
 | 
			
		||||
              'storeAddressDetail'
 | 
			
		||||
              "goodsManagementCategory",
 | 
			
		||||
              "storeCenter",
 | 
			
		||||
              "storeDesc",
 | 
			
		||||
              "storeLogo",
 | 
			
		||||
              "storeName",
 | 
			
		||||
              "storeAddressIdPath",
 | 
			
		||||
              "storeAddressPath",
 | 
			
		||||
              "storeAddressDetail",
 | 
			
		||||
            ];
 | 
			
		||||
 | 
			
		||||
            this.storeDisable = data.storeDisable;
 | 
			
		||||
@ -122,8 +124,8 @@ export default {
 | 
			
		||||
            third.forEach((e) => {
 | 
			
		||||
              this.thirdData[e] = data[e];
 | 
			
		||||
            });
 | 
			
		||||
            if (status === 'init') {
 | 
			
		||||
              if (this.storeDisable === 'APPLY') {
 | 
			
		||||
            if (status === "init") {
 | 
			
		||||
              if (this.storeDisable === "APPLY") {
 | 
			
		||||
                this.currentIndex = 0;
 | 
			
		||||
              } else {
 | 
			
		||||
                this.currentIndex = 3;
 | 
			
		||||
@ -132,37 +134,36 @@ export default {
 | 
			
		||||
            this.$nextTick(() => {
 | 
			
		||||
              this.dataReview = true;
 | 
			
		||||
              this.$forceUpdate();
 | 
			
		||||
            })
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 下一步
 | 
			
		||||
    nextPage (step) {
 | 
			
		||||
    nextPage(step) {
 | 
			
		||||
      this.currentIndex = step;
 | 
			
		||||
      this.getData('next')
 | 
			
		||||
    }
 | 
			
		||||
      this.getData("next");
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  mounted () {
 | 
			
		||||
    this.getData('init');
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.getData("init");
 | 
			
		||||
    this.getArticle();
 | 
			
		||||
  }
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.content {
 | 
			
		||||
  width: 1200px;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  border: 1px solid #eee;
 | 
			
		||||
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 | 
			
		||||
  min-height: 500px;
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
  box-shadow: 3px 3px 10px #999;
 | 
			
		||||
  border-radius: 20px;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  padding: 10px 20px;
 | 
			
		||||
 | 
			
		||||
  h3 {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
  h1 {
 | 
			
		||||
    
 | 
			
		||||
    margin-top: 20px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -179,4 +180,8 @@ export default {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  font-size: 20px;
 | 
			
		||||
}
 | 
			
		||||
.shop-entry {
 | 
			
		||||
  min-height: 100vh;
 | 
			
		||||
  padding: 32px 0;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -1,13 +1,10 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Andste on 2018/5/3.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import Cookies from 'js-cookie';
 | 
			
		||||
const psl = require('psl');
 | 
			
		||||
import Cookies from "js-cookie";
 | 
			
		||||
const psl = require("psl");
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  setItem: (key, value, options = {}) => {
 | 
			
		||||
    if (process.client) {
 | 
			
		||||
      console.log(process.client);
 | 
			
		||||
      const pPsl = psl.parse(document.domain);
 | 
			
		||||
      let domain = pPsl.domain;
 | 
			
		||||
      if (/\d+\.\d+\.\d+\.\d+/.test(pPsl.input)) domain = pPsl.input;
 | 
			
		||||
@ -15,7 +12,7 @@ export default {
 | 
			
		||||
    }
 | 
			
		||||
    Cookies.set(key, value, options);
 | 
			
		||||
  },
 | 
			
		||||
  getItem: (key) => {
 | 
			
		||||
  getItem: key => {
 | 
			
		||||
    return Cookies.get(key);
 | 
			
		||||
  },
 | 
			
		||||
  removeItem: (key, options = {}) => {
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.2 KiB  | 
@ -1,5 +1,134 @@
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const CompressionPlugin = require("compression-webpack-plugin");
 | 
			
		||||
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
 | 
			
		||||
const resolve = dir => {
 | 
			
		||||
  return path.join(__dirname, dir);
 | 
			
		||||
};
 | 
			
		||||
/**
 | 
			
		||||
 * 在项目开发的时候将生产环境以及开发环境进行判断
 | 
			
		||||
 * 将生产环境中的路径用cdn来进行优化处理
 | 
			
		||||
 * 将开发环境中替换为本地的内容,方便处理bug以及开启vueDev
 | 
			
		||||
 * 我们可以根据环境变量进行相应的处理,只有在产品的时候,才让插件去自动注入相应的资源文件到html页面
 | 
			
		||||
 */
 | 
			
		||||
const enableProduction = process.env.NODE_ENV === "production"; // 是否生产环境
 | 
			
		||||
 | 
			
		||||
let externals = {
 | 
			
		||||
  vue: "Vue",
 | 
			
		||||
  axios: "axios",
 | 
			
		||||
  "vue-router": "VueRouter",
 | 
			
		||||
  vuex: "Vuex",
 | 
			
		||||
  "view-design": "iview",
 | 
			
		||||
  "js-cookie": "Cookies"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 使用CDN的内容
 | 
			
		||||
let cdn = {
 | 
			
		||||
  css: ["https://cdn.jsdelivr.net/npm/view-design@4.1.1/dist/styles/iview.css"],
 | 
			
		||||
  js: [
 | 
			
		||||
    // vue must at first!
 | 
			
		||||
    "https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js",
 | 
			
		||||
    "https://cdn.jsdelivr.net/npm/vuex@3.1.2/dist/vuex.min.js",
 | 
			
		||||
    "https://cdn.jsdelivr.net/npm/vue-router@3.1.3/dist/vue-router.min.js",
 | 
			
		||||
    "https://cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js",
 | 
			
		||||
    "https://cdn.jsdelivr.net/npm/view-design@4.1.1/dist/iview.min.js",
 | 
			
		||||
    "https://cdn.jsdelivr.net/npm/js-cookie@2.2.1/src/js.cookie.min.js"
 | 
			
		||||
  ]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 删除注释
 | 
			
		||||
let jsPlugin = [
 | 
			
		||||
  new UglifyJsPlugin({
 | 
			
		||||
    uglifyOptions: {
 | 
			
		||||
      // 删除注释
 | 
			
		||||
      output: {
 | 
			
		||||
        comments: false
 | 
			
		||||
      },
 | 
			
		||||
      compress: {
 | 
			
		||||
        drop_console: true, // 删除所有调式带有console的
 | 
			
		||||
        drop_debugger: true,
 | 
			
		||||
        pure_funcs: ["console.log"] // 删除console.log
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
];
 | 
			
		||||
// 判断是否需要加载CDN
 | 
			
		||||
cdn = enableProduction ? cdn : { css: [], js: [] };
 | 
			
		||||
externals = enableProduction ? externals : {};
 | 
			
		||||
jsPlugin = enableProduction ? jsPlugin : [];
 | 
			
		||||
 | 
			
		||||
//  关闭eslint
 | 
			
		||||
module.exports = {
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
  // 输出文件目录,当运行 vue-cli-service build 时生成的生产环境构建文件的目录。注意目标目录在构建之前会被清除
 | 
			
		||||
  outputDir: "dist",
 | 
			
		||||
  // 放置生成的静态资源 (js、css、img、fonts) 的目录。
 | 
			
		||||
  assetsDir: "static",
 | 
			
		||||
 | 
			
		||||
  css: {
 | 
			
		||||
    // 是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能。
 | 
			
		||||
    sourceMap: false,
 | 
			
		||||
 | 
			
		||||
    loaderOptions: {
 | 
			
		||||
      sass: {
 | 
			
		||||
        data: `@import "@/assets/styles/global.scss";` //全局加载scss
 | 
			
		||||
      },
 | 
			
		||||
      // 向 CSS 相关的 loader 传递选项
 | 
			
		||||
      less: {
 | 
			
		||||
        lessOptions: {
 | 
			
		||||
          javascriptEnabled: true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  devServer: {
 | 
			
		||||
    port: 10000
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 打包时不生成.map文件 避免看到源码
 | 
			
		||||
  productionSourceMap: false,
 | 
			
		||||
 | 
			
		||||
  // 部署优化
 | 
			
		||||
  configureWebpack: {
 | 
			
		||||
    performance: {
 | 
			
		||||
      maxEntrypointSize: 10000000,
 | 
			
		||||
      maxAssetSize: 30000000
 | 
			
		||||
    },
 | 
			
		||||
    externals,
 | 
			
		||||
 | 
			
		||||
    // GZIP压缩
 | 
			
		||||
    plugins: [
 | 
			
		||||
      new CompressionPlugin({
 | 
			
		||||
        test: /\.js$|\.html$|\.css/, // 匹配文件
 | 
			
		||||
        threshold: 10240 // 对超过10k文件压缩
 | 
			
		||||
      })
 | 
			
		||||
    ],
 | 
			
		||||
    optimization: {
 | 
			
		||||
      minimizer: jsPlugin,
 | 
			
		||||
      runtimeChunk: "single",
 | 
			
		||||
      splitChunks: {
 | 
			
		||||
        chunks: "all",
 | 
			
		||||
        maxInitialRequests: Infinity,
 | 
			
		||||
        minSize: 20000,
 | 
			
		||||
        cacheGroups: {
 | 
			
		||||
          vendor: {
 | 
			
		||||
            test: /[\\/]node_modules[\\/]/,
 | 
			
		||||
            name(module) {
 | 
			
		||||
              const packageName = module.context.match(
 | 
			
		||||
                /[\\/]node_modules[\\/](.*?)([\\/]|$)/
 | 
			
		||||
              )[1];
 | 
			
		||||
              return `npm.${packageName.replace("@", "")}`;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 将cdn的资源挂载到插件上
 | 
			
		||||
  chainWebpack(config) {
 | 
			
		||||
    //  @ 对应 src目录
 | 
			
		||||
    config.resolve.alias.set("@", resolve("src"));
 | 
			
		||||
    config.plugin("html").tap(args => {
 | 
			
		||||
      args[0].cdn = cdn;
 | 
			
		||||
      return args;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -150,7 +150,7 @@
 | 
			
		||||
          <template slot="goodsSlot" slot-scope="{row}">
 | 
			
		||||
            <div style="margin-top: 5px; height: 80px; display: flex">
 | 
			
		||||
              <div style="">
 | 
			
		||||
                <img :src="row.image" style="height: 60px; margin-top: 1px; width: 60px"/>
 | 
			
		||||
                <img :src="row.image" style="height: 60px; margin-top: 1px; width: 60px" />
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div style="margin-left: 13px">
 | 
			
		||||
@ -165,7 +165,7 @@
 | 
			
		||||
                <Poptip trigger="hover" style="display: block;" title="扫码在手机中查看" transfer>
 | 
			
		||||
                  <div slot="content">
 | 
			
		||||
                    <vue-qr :text="wapLinkTo(row.goodsId,row.skuId)" :margin="0" colorDark="#000" colorLight="#fff"
 | 
			
		||||
                            :size="150"></vue-qr>
 | 
			
		||||
                      :size="150"></vue-qr>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <img src="../../../assets/qrcode.svg" class="hover-pointer" width="20" height="20" alt="">
 | 
			
		||||
                </Poptip>
 | 
			
		||||
@ -215,11 +215,11 @@
 | 
			
		||||
        <span>修改金额</span>
 | 
			
		||||
      </p>
 | 
			
		||||
      <div>
 | 
			
		||||
        <Form ref="modifyPriceForm" :model="modifyPriceForm" label-position="left" :label-width="100"
 | 
			
		||||
              :rules="modifyPriceValidate">
 | 
			
		||||
        <Form ref="modifyPriceForm" :model="modifyPriceForm" label-position="left" :label-width="70"
 | 
			
		||||
          :rules="modifyPriceValidate">
 | 
			
		||||
          <FormItem label="订单金额" prop="price">
 | 
			
		||||
            <Input v-model="modifyPriceForm.price" size="large" number maxlength="9"><span
 | 
			
		||||
              slot="append">元</span></Input>
 | 
			
		||||
            <InputNumber style="width:100px;" v-model="modifyPriceForm.price" :min="0" :max="999999"></InputNumber>
 | 
			
		||||
            <span class="ml_10">元</span>
 | 
			
		||||
          </FormItem>
 | 
			
		||||
        </Form>
 | 
			
		||||
      </div>
 | 
			
		||||
@ -236,10 +236,10 @@
 | 
			
		||||
      </p>
 | 
			
		||||
      <div>
 | 
			
		||||
        <Form ref="orderCancelForm" :model="orderCancelForm" label-position="left" :label-width="100"
 | 
			
		||||
              :rules="orderCancelValidate">
 | 
			
		||||
          :rules="orderCancelValidate">
 | 
			
		||||
          <FormItem label="取消原因" prop="reason">
 | 
			
		||||
            <Input v-model="orderCancelForm.reason" type="textarea" :autosize="{ minRows: 2, maxRows: 5 }"
 | 
			
		||||
                   placeholder="请输入取消原因"></Input>
 | 
			
		||||
              placeholder="请输入取消原因"></Input>
 | 
			
		||||
          </FormItem>
 | 
			
		||||
        </Form>
 | 
			
		||||
      </div>
 | 
			
		||||
@ -263,11 +263,11 @@
 | 
			
		||||
            <Input v-model="addressForm.consigneeMobile" size="large" maxlength="11"></Input>
 | 
			
		||||
          </FormItem>
 | 
			
		||||
          <FormItem label="地址信息" prop="consigneeAddressPath">
 | 
			
		||||
            <Input v-model="addr" disabled style="width: 305px" v-if="showRegion == false"/>
 | 
			
		||||
            <Input v-model="addr" disabled style="width: 305px" v-if="showRegion == false" />
 | 
			
		||||
            <Button v-if="showRegion == false" @click="regionClick" :loading="submitLoading" type="primary"
 | 
			
		||||
                    icon="ios-create-outline" style="margin-left: 8px">修改
 | 
			
		||||
              icon="ios-create-outline" style="margin-left: 8px">修改
 | 
			
		||||
            </Button>
 | 
			
		||||
            <region style="width: 400px" @selected="selectedRegion" v-if="showRegion == true"/>
 | 
			
		||||
            <region style="width: 400px" @selected="selectedRegion" v-if="showRegion == true" />
 | 
			
		||||
          </FormItem>
 | 
			
		||||
          <FormItem label="详细地址" prop="consigneeDetail">
 | 
			
		||||
            <Input v-model="addressForm.consigneeDetail" size="large" maxlength="50"></Input>
 | 
			
		||||
@ -286,7 +286,7 @@
 | 
			
		||||
      </p>
 | 
			
		||||
      <div class="order-log-div">
 | 
			
		||||
        <Table :loading="loading" border :columns="orderLogColumns" :data="orderInfo.orderLogs" ref="table"
 | 
			
		||||
               sortable="custom"></Table>
 | 
			
		||||
          sortable="custom"></Table>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div slot="footer" style="text-align: right">
 | 
			
		||||
@ -300,16 +300,16 @@
 | 
			
		||||
import * as API_Order from "@/api/order";
 | 
			
		||||
import * as RegExp from "@/libs/RegExp.js";
 | 
			
		||||
import region from "@/views/lili-components/region";
 | 
			
		||||
import vueQr from 'vue-qr'
 | 
			
		||||
import vueQr from "vue-qr";
 | 
			
		||||
export default {
 | 
			
		||||
  name: "orderList",
 | 
			
		||||
  components: {
 | 
			
		||||
    region,
 | 
			
		||||
    "vue-qr":vueQr
 | 
			
		||||
    "vue-qr": vueQr,
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      loading:false, //加载表格
 | 
			
		||||
      loading: false, //加载表格
 | 
			
		||||
      submitLoading: false, // 添加或编辑提交状态
 | 
			
		||||
      addr: "", //地区
 | 
			
		||||
      regionId: [], //地区id
 | 
			
		||||
@ -348,7 +348,7 @@ export default {
 | 
			
		||||
      //验证要调整的订单金额
 | 
			
		||||
      modifyPriceValidate: {
 | 
			
		||||
        reason: [
 | 
			
		||||
          {required: true, message: "请输入大于0小于99999的合法金额"},
 | 
			
		||||
          { required: true, message: "请输入大于0小于99999的合法金额" },
 | 
			
		||||
          {
 | 
			
		||||
            pattern: /^[1-9]\d{0,3}(\.\d{1,2})?$/,
 | 
			
		||||
            message: "请输入大于0小于9999的合法金额",
 | 
			
		||||
@ -360,7 +360,7 @@ export default {
 | 
			
		||||
      //验证取消订单原因
 | 
			
		||||
      orderCancelValidate: {
 | 
			
		||||
        reason: [
 | 
			
		||||
          {required: true, message: "取消原因不能为空", trigger: "blur"},
 | 
			
		||||
          { required: true, message: "取消原因不能为空", trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      addressModal: false, //弹出修改收件信息框
 | 
			
		||||
@ -374,18 +374,18 @@ export default {
 | 
			
		||||
      },
 | 
			
		||||
      orderDeliverFormValidate: {
 | 
			
		||||
        logisticsNo: [
 | 
			
		||||
          {required: true, message: "发货单号不能为空", trigger: "change"},
 | 
			
		||||
          { required: true, message: "发货单号不能为空", trigger: "change" },
 | 
			
		||||
        ],
 | 
			
		||||
        logisticsId: [
 | 
			
		||||
          {required: true, message: "请选择物流公司", trigger: "blur"},
 | 
			
		||||
          { required: true, message: "请选择物流公司", trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      addressRule: {
 | 
			
		||||
        consigneeName: [
 | 
			
		||||
          {required: true, message: "收货人姓名不能为空", trigger: "blur"},
 | 
			
		||||
          { required: true, message: "收货人姓名不能为空", trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
        consigneeMobile: [
 | 
			
		||||
          {required: true, message: "联系方式不能为空", trigger: "blur"},
 | 
			
		||||
          { required: true, message: "联系方式不能为空", trigger: "blur" },
 | 
			
		||||
          {
 | 
			
		||||
            pattern: RegExp.mobile,
 | 
			
		||||
            trigger: "blur",
 | 
			
		||||
@ -393,7 +393,7 @@ export default {
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        consigneeDetail: [
 | 
			
		||||
          {required: true, message: "详细地址不能为空", trigger: "blur"},
 | 
			
		||||
          { required: true, message: "详细地址不能为空", trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -67,7 +67,7 @@
 | 
			
		||||
    <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
 | 
			
		||||
    <script src="<%=js%>"></script>
 | 
			
		||||
    <% } %>
 | 
			
		||||
    <script src="./config.js"></script>
 | 
			
		||||
    <script src="/config.js"></script>
 | 
			
		||||
    <noscript>
 | 
			
		||||
      <strong
 | 
			
		||||
        >We're sorry but lili-admin doesn't work properly without JavaScript
 | 
			
		||||
 | 
			
		||||