├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── LICENSE ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── index.html ├── package-lock.json ├── package.json ├── package.swan.json ├── project.config.json ├── project.swan.json ├── src ├── App.vue ├── app.json ├── components │ ├── banners.vue │ ├── card.vue │ ├── goodsModal.vue │ ├── groupModal.vue │ └── secGoodsModal.vue ├── main.js ├── pages │ ├── addBankCard │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── address │ │ ├── index.vue │ │ └── main.js │ ├── addresslist │ │ ├── index.vue │ │ └── main.js │ ├── areaZone │ │ ├── index.vue │ │ └── main.js │ ├── articleDetail │ │ ├── index.vue │ │ └── main.js │ ├── bargain │ │ ├── index.vue │ │ └── main.js │ ├── bargainDetail │ │ ├── index.vue │ │ └── main.js │ ├── bargainList │ │ ├── index.vue │ │ └── main.js │ ├── bargainProductDetail │ │ ├── index.vue │ │ └── main.js │ ├── bargainProductList │ │ ├── index.vue │ │ └── main.js │ ├── cart │ │ ├── index.vue │ │ └── main.js │ ├── content │ │ ├── index.vue │ │ └── main.js │ ├── counter │ │ ├── index.vue │ │ ├── main.js │ │ └── store.js │ ├── createOrder │ │ ├── index.vue │ │ └── main.js │ ├── dayGoods │ │ ├── index.vue │ │ └── main.js │ ├── evaluate │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── faddish │ │ ├── index.vue │ │ └── main.js │ ├── footprint │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── forgetPassword │ │ ├── index.vue │ │ └── main.js │ ├── goods │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── goodsDetail │ │ ├── index.vue │ │ └── main.js │ ├── goodsList │ │ ├── index.vue │ │ └── main.js │ ├── groupList │ │ ├── index.vue │ │ └── main.js │ ├── groupProductDetail │ │ ├── index.vue │ │ └── main.js │ ├── index │ │ ├── index.vue │ │ ├── index1.vue │ │ ├── main.js │ │ └── main.json │ ├── introduce │ │ ├── index.vue │ │ ├── index1.vue │ │ ├── main.js │ │ └── main.json │ ├── inviteCode │ │ ├── index.vue │ │ └── main.js │ ├── invited │ │ ├── index.vue │ │ └── main.js │ ├── itemList │ │ ├── index.vue │ │ └── main.js │ ├── login │ │ ├── index.vue │ │ └── main.js │ ├── logistic │ │ ├── index.vue │ │ └── main.js │ ├── logs │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── manager │ │ ├── index.vue │ │ └── main.js │ ├── managerWallet │ │ ├── index.vue │ │ └── main.js │ ├── memberCenter │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── myBankCard │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── myCollection │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── myCoupons │ │ ├── index.vue │ │ └── main.js │ ├── myEvaluate │ │ ├── index.vue │ │ └── main.js │ ├── myVouchers │ │ ├── index.vue │ │ └── main.js │ ├── newPeople │ │ ├── index.vue │ │ └── main.js │ ├── orderDetail │ │ ├── index.vue │ │ └── main.js │ ├── orderlist │ │ ├── index.vue │ │ └── main.js │ ├── payment │ │ ├── index.vue │ │ └── main.js │ ├── personal │ │ ├── index.vue │ │ └── main.js │ ├── prelogin │ │ ├── index.vue │ │ └── main.js │ ├── regist │ │ ├── index.vue │ │ └── main.js │ ├── seckill │ │ ├── index.vue │ │ └── main.js │ ├── seckillDetail │ │ ├── index.vue │ │ └── main.js │ ├── selectAddress │ │ ├── index.vue │ │ └── main.js │ ├── send │ │ ├── index.vue │ │ └── main.js │ ├── shopInfo │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json │ ├── sourceArea │ │ ├── index.vue │ │ └── main.js │ ├── userLogin │ │ ├── login.vue │ │ ├── main.js │ │ └── uni.scss │ ├── vouchers │ │ ├── index.vue │ │ └── main.js │ └── walletDetails │ │ ├── index.vue │ │ ├── main.js │ │ └── main.json ├── sdk.js ├── server │ └── api.js ├── sitemap.json ├── store │ ├── actions.js │ ├── getters.js │ ├── index.js │ └── mutations.js ├── style │ └── main.css └── utils │ ├── base64src.js │ ├── index.js │ └── request.js └── static ├── .gitkeep ├── colorui ├── animation.wxss ├── components │ ├── cu-custom.js │ ├── cu-custom.json │ ├── cu-custom.wxml │ └── cu-custom.wxss ├── icon.wxss └── main.wxss ├── iconfont ├── iconfont.eot ├── iconfont.js ├── iconfont.json ├── iconfont.svg ├── iconfont.ttf ├── iconfont.woff ├── iconfont.woff2 └── iconfont.wxss ├── images ├── activeBtn.png ├── activety.png ├── add.png ├── address-bg.png ├── address.png ├── banner.png ├── cart.png ├── complete.png ├── default.png ├── dianpu.png ├── erweima.png ├── head.png ├── home.png ├── huiyuan.png ├── inviteBtn.png ├── kanIcon.png ├── login.png ├── logo.png ├── manjian.png ├── miaosha.png ├── normalUserBg.png ├── obligation.png ├── off.png ├── on.png ├── order.png ├── pay.png ├── person-bg.png ├── person.png ├── phone.png ├── pintuan.png ├── play.png ├── prefecture.png ├── prefecture1.png ├── saled.png ├── send.png ├── sending.png ├── share.png ├── shareBtn.png ├── sheyuan.png ├── shopInfo.png ├── success.png ├── user.png ├── wallet.png └── wechat.png └── tabs ├── cart-active.png ├── cart.png ├── goods-active.png ├── goods.png ├── home-active.png ├── home.png ├── message-active.png ├── message.png ├── personal-active.png └── personal.png /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["istanbul"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-mpvue-wxss": {} 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 联系QQ: 1002821824 2 | 3 | # B2C商城小程序端for Mpvue project 4 | 5 | > A Mpvue project 6 | 7 | ## Build Setup 8 | 9 | ``` bash 10 | # 初始化项目 11 | vue init mpvue/mpvue-quickstart myproject 12 | cd myproject 13 | 14 | # 安装依赖 15 | yarn 16 | 17 | # 开发时构建 18 | npm dev 19 | 20 | # 打包构建 21 | npm build 22 | 23 | # 指定平台的开发时构建(微信、百度、头条、支付宝) 24 | npm dev:wx 25 | npm dev:swan 26 | npm dev:tt 27 | npm dev:my 28 | 29 | # 指定平台的打包构建 30 | npm build:wx 31 | npm build:swan 32 | npm build:tt 33 | npm build:my 34 | 35 | # 生成 bundle 分析报告 36 | npm run build --report 37 | ``` 38 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | process.env.PLATFORM = process.argv[process.argv.length - 1] || 'wx' 5 | 6 | var ora = require('ora') 7 | var rm = require('rimraf') 8 | var path = require('path') 9 | var chalk = require('chalk') 10 | var webpack = require('webpack') 11 | var config = require('../config') 12 | var webpackConfig = require('./webpack.prod.conf') 13 | var utils = require('./utils') 14 | 15 | var spinner = ora('building for production...') 16 | spinner.start() 17 | 18 | rm(path.join(config.build.assetsRoot, '*'), err => { 19 | if (err) throw err 20 | webpack(webpackConfig, function (err, stats) { 21 | spinner.stop() 22 | if (err) throw err 23 | if (process.env.PLATFORM === 'swan') { 24 | utils.writeFrameworkinfo() 25 | } 26 | process.stdout.write(stats.toString({ 27 | colors: true, 28 | modules: false, 29 | children: false, 30 | chunks: false, 31 | chunkModules: false 32 | }) + '\n\n') 33 | 34 | if (stats.hasErrors()) { 35 | console.log(chalk.red(' Build failed with errors.\n')) 36 | process.exit(1) 37 | } 38 | 39 | console.log(chalk.cyan(' Build complete.\n')) 40 | console.log(chalk.yellow( 41 | ' Tip: built files are meant to be served over an HTTP server.\n' + 42 | ' Opening index.html over file:// won\'t work.\n' 43 | )) 44 | }) 45 | }) 46 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | var shell = require('shelljs') 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | } 15 | ] 16 | 17 | if (shell.which('npm')) { 18 | versionRequirements.push({ 19 | name: 'npm', 20 | currentVersion: exec('npm --version'), 21 | versionRequirement: packageConfig.engines.npm 22 | }) 23 | } 24 | 25 | module.exports = function () { 26 | var warnings = [] 27 | for (var i = 0; i < versionRequirements.length; i++) { 28 | var mod = versionRequirements[i] 29 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 30 | warnings.push(mod.name + ': ' + 31 | chalk.red(mod.currentVersion) + ' should be ' + 32 | chalk.green(mod.versionRequirement) 33 | ) 34 | } 35 | } 36 | 37 | if (warnings.length) { 38 | console.log('') 39 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 40 | console.log() 41 | for (var i = 0; i < warnings.length; i++) { 42 | var warning = warnings[i] 43 | console.log(' ' + warning) 44 | } 45 | console.log() 46 | process.exit(1) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.PLATFORM = process.argv[process.argv.length - 1] || 'wx' 4 | var config = require('../config') 5 | if (!process.env.NODE_ENV) { 6 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 7 | } 8 | 9 | // var opn = require('opn') 10 | var path = require('path') 11 | var express = require('express') 12 | var webpack = require('webpack') 13 | var proxyMiddleware = require('http-proxy-middleware') 14 | var portfinder = require('portfinder') 15 | var webpackConfig = require('./webpack.dev.conf') 16 | var utils = require('./utils') 17 | 18 | // default port where dev server listens for incoming traffic 19 | var port = process.env.PORT || config.dev.port 20 | // automatically open browser, if not set will be false 21 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 22 | // Define HTTP proxies to your custom API backend 23 | // https://github.com/chimurai/http-proxy-middleware 24 | var proxyTable = config.dev.proxyTable 25 | 26 | var app = express() 27 | var compiler = webpack(webpackConfig) 28 | if (process.env.PLATFORM === 'swan') { 29 | utils.writeFrameworkinfo() 30 | } 31 | 32 | // var devMiddleware = require('webpack-dev-middleware')(compiler, { 33 | // publicPath: webpackConfig.output.publicPath, 34 | // quiet: true 35 | // }) 36 | 37 | // var hotMiddleware = require('webpack-hot-middleware')(compiler, { 38 | // log: false, 39 | // heartbeat: 2000 40 | // }) 41 | // force page reload when html-webpack-plugin template changes 42 | // compiler.plugin('compilation', function (compilation) { 43 | // compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 44 | // hotMiddleware.publish({ action: 'reload' }) 45 | // cb() 46 | // }) 47 | // }) 48 | 49 | // proxy api requests 50 | Object.keys(proxyTable).forEach(function (context) { 51 | var options = proxyTable[context] 52 | if (typeof options === 'string') { 53 | options = { target: options } 54 | } 55 | app.use(proxyMiddleware(options.filter || context, options)) 56 | }) 57 | 58 | // handle fallback for HTML5 history API 59 | app.use(require('connect-history-api-fallback')()) 60 | 61 | // serve webpack bundle output 62 | // app.use(devMiddleware) 63 | 64 | // enable hot-reload and state-preserving 65 | // compilation error display 66 | // app.use(hotMiddleware) 67 | 68 | // serve pure static assets 69 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 70 | app.use(staticPath, express.static('./static')) 71 | 72 | // var uri = 'http://localhost:' + port 73 | 74 | var _resolve 75 | var readyPromise = new Promise(resolve => { 76 | _resolve = resolve 77 | }) 78 | 79 | // console.log('> Starting dev server...') 80 | // devMiddleware.waitUntilValid(() => { 81 | // console.log('> Listening at ' + uri + '\n') 82 | // // when env is testing, don't need open it 83 | // if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 84 | // opn(uri) 85 | // } 86 | // _resolve() 87 | // }) 88 | 89 | module.exports = new Promise((resolve, reject) => { 90 | portfinder.basePort = port 91 | portfinder.getPortPromise() 92 | .then(newPort => { 93 | if (port !== newPort) { 94 | console.log(`${port}端口被占用,开启新端口${newPort}`) 95 | } 96 | var server = app.listen(newPort, 'localhost') 97 | // for 小程序的文件保存机制 98 | require('webpack-dev-middleware-hard-disk')(compiler, { 99 | publicPath: webpackConfig.output.publicPath, 100 | quiet: true 101 | }) 102 | resolve({ 103 | ready: readyPromise, 104 | close: () => { 105 | server.close() 106 | } 107 | }) 108 | }).catch(error => { 109 | console.log('没有找到空闲端口,请打开任务管理器杀死进程端口再试', error) 110 | }) 111 | }) 112 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var fs = require('fs') 3 | var config = require('../config') 4 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | var mpvueInfo = require('../node_modules/mpvue/package.json') 6 | var packageInfo = require('../package.json') 7 | var mkdirp = require('mkdirp') 8 | 9 | exports.assetsPath = function (_path) { 10 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 11 | ? config.build.assetsSubDirectory 12 | : config.dev.assetsSubDirectory 13 | return path.posix.join(assetsSubDirectory, _path) 14 | } 15 | 16 | exports.cssLoaders = function (options) { 17 | options = options || {} 18 | 19 | var cssLoader = { 20 | loader: 'css-loader', 21 | options: { 22 | minimize: process.env.NODE_ENV === 'production', 23 | sourceMap: options.sourceMap 24 | } 25 | } 26 | 27 | var postcssLoader = { 28 | loader: 'postcss-loader', 29 | options: { 30 | sourceMap: true 31 | } 32 | } 33 | 34 | var px2rpxLoader = { 35 | loader: 'px2rpx-loader', 36 | options: { 37 | baseDpr: 1, 38 | rpxUnit: 0.5 39 | } 40 | } 41 | 42 | // generate loader string to be used with extract text plugin 43 | function generateLoaders (loader, loaderOptions) { 44 | var loaders = [cssLoader, px2rpxLoader, postcssLoader] 45 | if (loader) { 46 | loaders.push({ 47 | loader: loader + '-loader', 48 | options: Object.assign({}, loaderOptions, { 49 | sourceMap: options.sourceMap 50 | }) 51 | }) 52 | } 53 | 54 | // Extract CSS when that option is specified 55 | // (which is the case during production build) 56 | if (options.extract) { 57 | return ExtractTextPlugin.extract({ 58 | use: loaders, 59 | fallback: 'vue-style-loader' 60 | }) 61 | } else { 62 | return ['vue-style-loader'].concat(loaders) 63 | } 64 | } 65 | 66 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 67 | return { 68 | css: generateLoaders(), 69 | wxss: generateLoaders(), 70 | postcss: generateLoaders(), 71 | less: generateLoaders('less'), 72 | sass: generateLoaders('sass', { indentedSyntax: true }), 73 | scss: generateLoaders('sass'), 74 | stylus: generateLoaders('stylus'), 75 | styl: generateLoaders('stylus') 76 | } 77 | } 78 | 79 | // Generate loaders for standalone style files (outside of .vue) 80 | exports.styleLoaders = function (options) { 81 | var output = [] 82 | var loaders = exports.cssLoaders(options) 83 | for (var extension in loaders) { 84 | var loader = loaders[extension] 85 | output.push({ 86 | test: new RegExp('\\.' + extension + '$'), 87 | use: loader 88 | }) 89 | } 90 | return output 91 | } 92 | 93 | const writeFile = async (filePath, content) => { 94 | let dir = path.dirname(filePath) 95 | let exist = fs.existsSync(dir) 96 | if (!exist) { 97 | await mkdirp(dir) 98 | } 99 | await fs.writeFileSync(filePath, content, 'utf8') 100 | } 101 | 102 | exports.writeFrameworkinfo = function () { 103 | var buildInfo = { 104 | 'toolName': mpvueInfo.name, 105 | 'toolFrameWorkVersion': mpvueInfo.version, 106 | 'toolCliVersion': packageInfo.mpvueTemplateProjectVersion || '', 107 | 'createTime': Date.now() 108 | } 109 | 110 | var content = JSON.stringify(buildInfo) 111 | var fileName = '.frameworkinfo' 112 | var rootDir = path.resolve(__dirname, `../${fileName}`) 113 | var distDir = path.resolve(config.build.assetsRoot, `./${fileName}`) 114 | 115 | writeFile(rootDir, content) 116 | writeFile(distDir, content) 117 | } 118 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | // var isProduction = process.env.NODE_ENV === 'production' 4 | // for mp 5 | var isProduction = true 6 | 7 | module.exports = { 8 | loaders: utils.cssLoaders({ 9 | sourceMap: isProduction 10 | ? config.build.productionSourceMap 11 | : config.dev.cssSourceMap, 12 | extract: isProduction 13 | }), 14 | transformToRequire: { 15 | video: 'src', 16 | source: 'src', 17 | img: 'src', 18 | image: 'xlink:href' 19 | }, 20 | fileExt: config.build.fileExt 21 | } 22 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var fs = require('fs') 3 | var utils = require('./utils') 4 | var config = require('../config') 5 | var webpack = require('webpack') 6 | var merge = require('webpack-merge') 7 | var vueLoaderConfig = require('./vue-loader.conf') 8 | var MpvuePlugin = require('webpack-mpvue-asset-plugin') 9 | var glob = require('glob') 10 | var CopyWebpackPlugin = require('copy-webpack-plugin') 11 | var relative = require('relative') 12 | 13 | function resolve (dir) { 14 | return path.join(__dirname, '..', dir) 15 | } 16 | 17 | function getEntry (rootSrc) { 18 | var map = {}; 19 | glob.sync(rootSrc + '/pages/**/main.js') 20 | .forEach(file => { 21 | var key = relative(rootSrc, file).replace('.js', ''); 22 | map[key] = file; 23 | }) 24 | return map; 25 | } 26 | 27 | const appEntry = { app: resolve('./src/main.js') } 28 | const pagesEntry = getEntry(resolve('./src'), 'pages/**/main.js') 29 | const entry = Object.assign({}, appEntry, pagesEntry) 30 | 31 | let baseWebpackConfig = { 32 | // 如果要自定义生成的 dist 目录里面的文件路径, 33 | // 可以将 entry 写成 {'toPath': 'fromPath'} 的形式, 34 | // toPath 为相对于 dist 的路径, 例:index/demo,则生成的文件地址为 dist/index/demo.js 35 | entry, 36 | target: require('mpvue-webpack-target'), 37 | output: { 38 | path: config.build.assetsRoot, 39 | jsonpFunction: 'webpackJsonpMpvue', 40 | filename: '[name].js', 41 | publicPath: process.env.NODE_ENV === 'production' 42 | ? config.build.assetsPublicPath 43 | : config.dev.assetsPublicPath 44 | }, 45 | resolve: { 46 | extensions: ['.js', '.vue', '.json'], 47 | alias: { 48 | 'vue': 'mpvue', 49 | '@': resolve('src') 50 | }, 51 | symlinks: false, 52 | aliasFields: ['mpvue', 'weapp', 'browser'], 53 | mainFields: ['browser', 'module', 'main'] 54 | }, 55 | module: { 56 | rules: [ 57 | { 58 | test: /\.vue$/, 59 | loader: 'mpvue-loader', 60 | options: vueLoaderConfig 61 | }, 62 | 63 | { 64 | test: /\.js$/, 65 | include: [resolve('src'), resolve('test')], 66 | use: [ 67 | 'babel-loader', 68 | { 69 | loader: 'mpvue-loader', 70 | options: Object.assign({checkMPEntry: true}, vueLoaderConfig) 71 | }, 72 | ] 73 | }, 74 | { 75 | test: /\.scss$/, 76 | loaders: ['style', 'css', 'sass'] 77 | }, 78 | { 79 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 80 | loader: 'url-loader', 81 | options: { 82 | limit: 10000, 83 | name: utils.assetsPath('img/[name].[ext]') 84 | } 85 | }, 86 | { 87 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 88 | loader: 'url-loader', 89 | options: { 90 | limit: 10000, 91 | name: utils.assetsPath('media/[name].[ext]') 92 | } 93 | }, 94 | { 95 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 96 | loader: 'url-loader', 97 | options: { 98 | limit: 10000, 99 | name: utils.assetsPath('fonts/[name].[ext]') 100 | } 101 | } 102 | ] 103 | }, 104 | plugins: [ 105 | // api 统一桥协议方案 106 | new webpack.DefinePlugin({ 107 | 'mpvue': 'global.mpvue', 108 | 'mpvuePlatform': 'global.mpvuePlatform' 109 | }), 110 | new MpvuePlugin(), 111 | new CopyWebpackPlugin([{ 112 | from: '**/*.json', 113 | to: '' 114 | }], { 115 | context: 'src/' 116 | }), 117 | new CopyWebpackPlugin([ 118 | { 119 | from: path.resolve(__dirname, '../static'), 120 | to: path.resolve(config.build.assetsRoot, './static'), 121 | ignore: ['.*'] 122 | } 123 | ]) 124 | ] 125 | } 126 | 127 | // 针对百度小程序,由于不支持通过 miniprogramRoot 进行自定义构建完的文件的根路径 128 | // 所以需要将项目根路径下面的 project.swan.json 拷贝到构建目录 129 | // 然后百度开发者工具将 dist/swan 作为项目根目录打 130 | const projectConfigMap = { 131 | tt: '../project.config.json', 132 | swan: '../project.swan.json' 133 | } 134 | 135 | const PLATFORM = process.env.PLATFORM 136 | if (/^(swan)|(tt)$/.test(PLATFORM)) { 137 | baseWebpackConfig = merge(baseWebpackConfig, { 138 | plugins: [ 139 | new CopyWebpackPlugin([{ 140 | from: path.resolve(__dirname, projectConfigMap[PLATFORM]), 141 | to: path.resolve(config.build.assetsRoot) 142 | }]) 143 | ] 144 | }) 145 | } 146 | 147 | module.exports = baseWebpackConfig 148 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | // var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | var MpvueVendorPlugin = require('webpack-mpvue-vendor-plugin') 9 | 10 | // copy from ./webpack.prod.conf.js 11 | var path = require('path') 12 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 13 | var CopyWebpackPlugin = require('copy-webpack-plugin') 14 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 15 | 16 | // add hot-reload related code to entry chunks 17 | // Object.keys(baseWebpackConfig.entry).forEach(function (name) { 18 | // baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 19 | // }) 20 | 21 | module.exports = merge(baseWebpackConfig, { 22 | module: { 23 | rules: utils.styleLoaders({ 24 | sourceMap: config.dev.cssSourceMap, 25 | extract: true 26 | }) 27 | }, 28 | // cheap-module-eval-source-map is faster for development 29 | // devtool: '#cheap-module-eval-source-map', 30 | // devtool: '#source-map', 31 | output: { 32 | path: config.build.assetsRoot, 33 | // filename: utils.assetsPath('[name].[chunkhash].js'), 34 | // chunkFilename: utils.assetsPath('[id].[chunkhash].js') 35 | filename: utils.assetsPath('[name].js'), 36 | chunkFilename: utils.assetsPath('[id].js') 37 | }, 38 | plugins: [ 39 | new webpack.DefinePlugin({ 40 | 'process.env': config.dev.env 41 | }), 42 | 43 | // copy from ./webpack.prod.conf.js 44 | // extract css into its own file 45 | new ExtractTextPlugin({ 46 | // filename: utils.assetsPath('[name].[contenthash].css') 47 | filename: utils.assetsPath(`[name].${config.dev.fileExt.style}`) 48 | }), 49 | // Compress extracted CSS. We are using this plugin so that possible 50 | // duplicated CSS from different components can be deduped. 51 | new OptimizeCSSPlugin({ 52 | cssProcessorOptions: { 53 | safe: true 54 | } 55 | }), 56 | new webpack.optimize.CommonsChunkPlugin({ 57 | name: 'common/vendor', 58 | minChunks: function (module, count) { 59 | // any required modules inside node_modules are extracted to vendor 60 | return ( 61 | module.resource && 62 | /\.js$/.test(module.resource) && 63 | module.resource.indexOf('node_modules') >= 0 64 | ) || count > 1 65 | } 66 | }), 67 | new webpack.optimize.CommonsChunkPlugin({ 68 | name: 'common/manifest', 69 | chunks: ['common/vendor'] 70 | }), 71 | new MpvueVendorPlugin({ 72 | platform: process.env.PLATFORM 73 | }), 74 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 75 | // new webpack.HotModuleReplacementPlugin(), 76 | new webpack.NoEmitOnErrorsPlugin(), 77 | // https://github.com/ampedandwired/html-webpack-plugin 78 | // new HtmlWebpackPlugin({ 79 | // filename: 'index.html', 80 | // template: 'index.html', 81 | // inject: true 82 | // }), 83 | new FriendlyErrorsPlugin() 84 | ] 85 | }) 86 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var UglifyJsPlugin = require('uglifyjs-webpack-plugin') 8 | var CopyWebpackPlugin = require('copy-webpack-plugin') 9 | // var HtmlWebpackPlugin = require('html-webpack-plugin') 10 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | var MpvueVendorPlugin = require('webpack-mpvue-vendor-plugin') 13 | var env = config.build.env 14 | 15 | var webpackConfig = merge(baseWebpackConfig, { 16 | module: { 17 | rules: utils.styleLoaders({ 18 | sourceMap: config.build.productionSourceMap, 19 | extract: true 20 | }) 21 | }, 22 | devtool: config.build.productionSourceMap ? '#source-map' : false, 23 | output: { 24 | path: config.build.assetsRoot, 25 | // filename: utils.assetsPath('[name].[chunkhash].js'), 26 | // chunkFilename: utils.assetsPath('[id].[chunkhash].js') 27 | filename: utils.assetsPath('[name].js'), 28 | chunkFilename: utils.assetsPath('[id].js') 29 | }, 30 | plugins: [ 31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 32 | new webpack.DefinePlugin({ 33 | 'process.env': env 34 | }), 35 | // extract css into its own file 36 | new ExtractTextPlugin({ 37 | // filename: utils.assetsPath('[name].[contenthash].css') 38 | filename: utils.assetsPath(`[name].${config.build.fileExt.style}`) 39 | }), 40 | // Compress extracted CSS. We are using this plugin so that possible 41 | // duplicated CSS from different components can be deduped. 42 | new OptimizeCSSPlugin({ 43 | cssProcessorOptions: { 44 | safe: true 45 | } 46 | }), 47 | // generate dist index.html with correct asset hash for caching. 48 | // you can customize output by editing /index.html 49 | // see https://github.com/ampedandwired/html-webpack-plugin 50 | // new HtmlWebpackPlugin({ 51 | // filename: config.build.index, 52 | // template: 'index.html', 53 | // inject: true, 54 | // minify: { 55 | // removeComments: true, 56 | // collapseWhitespace: true, 57 | // removeAttributeQuotes: true 58 | // // more options: 59 | // // https://github.com/kangax/html-minifier#options-quick-reference 60 | // }, 61 | // // necessary to consistently work with multiple chunks via CommonsChunkPlugin 62 | // chunksSortMode: 'dependency' 63 | // }), 64 | // keep module.id stable when vender modules does not change 65 | new webpack.HashedModuleIdsPlugin(), 66 | // split vendor js into its own file 67 | new webpack.optimize.CommonsChunkPlugin({ 68 | name: 'common/vendor', 69 | minChunks: function (module, count) { 70 | // any required modules inside node_modules are extracted to vendor 71 | return ( 72 | module.resource && 73 | /\.js$/.test(module.resource) && 74 | module.resource.indexOf('node_modules') >= 0 75 | ) || count > 1 76 | } 77 | }), 78 | // extract webpack runtime and module manifest to its own file in order to 79 | // prevent vendor hash from being updated whenever app bundle is updated 80 | new webpack.optimize.CommonsChunkPlugin({ 81 | name: 'common/manifest', 82 | chunks: ['common/vendor'] 83 | }), 84 | new MpvueVendorPlugin({ 85 | platform: process.env.PLATFORM 86 | }) 87 | ] 88 | }) 89 | 90 | // if (config.build.productionGzip) { 91 | // var CompressionWebpackPlugin = require('compression-webpack-plugin') 92 | 93 | // webpackConfig.plugins.push( 94 | // new CompressionWebpackPlugin({ 95 | // asset: '[path].gz[query]', 96 | // algorithm: 'gzip', 97 | // test: new RegExp( 98 | // '\\.(' + 99 | // config.build.productionGzipExtensions.join('|') + 100 | // ')$' 101 | // ), 102 | // threshold: 10240, 103 | // minRatio: 0.8 104 | // }) 105 | // ) 106 | // } 107 | 108 | if (config.build.bundleAnalyzerReport) { 109 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 110 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 111 | } 112 | 113 | var useUglifyJs = process.env.PLATFORM !== 'swan' 114 | if (useUglifyJs) { 115 | webpackConfig.plugins.push(new UglifyJsPlugin({ 116 | sourceMap: true 117 | })) 118 | } 119 | 120 | module.exports = webpackConfig 121 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | var fileExtConfig = { 4 | swan: { 5 | template: 'swan', 6 | script: 'js', 7 | style: 'css', 8 | platform: 'swan' 9 | }, 10 | tt: { 11 | template: 'ttml', 12 | script: 'js', 13 | style: 'ttss', 14 | platform: 'tt' 15 | }, 16 | wx: { 17 | template: 'wxml', 18 | script: 'js', 19 | style: 'wxss', 20 | platform: 'wx' 21 | }, 22 | my: { 23 | template: 'axml', 24 | script: 'js', 25 | style: 'acss', 26 | platform: 'my' 27 | } 28 | } 29 | var fileExt = fileExtConfig[process.env.PLATFORM] 30 | 31 | module.exports = { 32 | build: { 33 | env: require('./prod.env'), 34 | index: path.resolve(__dirname, `../dist/${fileExt.platform}/index.html`), 35 | assetsRoot: path.resolve(__dirname, `../dist/${fileExt.platform}`), 36 | assetsSubDirectory: '', 37 | assetsPublicPath: '/', 38 | productionSourceMap: false, 39 | // Gzip off by default as many popular static hosts such as 40 | // Surge or Netlify already gzip all static assets for you. 41 | // Before setting to `true`, make sure to: 42 | // npm install --save-dev compression-webpack-plugin 43 | productionGzip: false, 44 | productionGzipExtensions: ['js', 'css'], 45 | // Run the build command with an extra argument to 46 | // View the bundle analyzer report after build finishes: 47 | // `npm run build --report` 48 | // Set to `true` or `false` to always turn it on or off 49 | bundleAnalyzerReport: process.env.npm_config_report, 50 | fileExt: fileExt 51 | }, 52 | dev: { 53 | env: require('./dev.env'), 54 | port: 8000, 55 | // 在小程序开发者工具中不需要自动打开浏览器 56 | autoOpenBrowser: true, 57 | assetsSubDirectory: '', 58 | assetsPublicPath: '/', 59 | proxyTable: {}, 60 | // CSS Sourcemaps off by default because relative paths are "buggy" 61 | // with this option, according to the CSS-Loader README 62 | // (https://github.com/webpack/css-loader#sourcemaps) 63 | // In our experience, they generally work as expected, 64 | // just be aware of this issue when enabling this option. 65 | cssSourceMap: false, 66 | fileExt: fileExt 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | shop 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shop", 3 | "version": "1.0.0", 4 | "mpvueTemplateProjectVersion": "0.1.0", 5 | "description": "A Mpvue project", 6 | "author": "sweida ", 7 | "private": true, 8 | "scripts": { 9 | "dev:wx": "node build/dev-server.js wx", 10 | "start:wx": "npm run dev:wx", 11 | "build:wx": "node build/build.js wx", 12 | "dev:swan": "node build/dev-server.js swan", 13 | "start:swan": "npm run dev:swan", 14 | "build:swan": "node build/build.js swan", 15 | "dev:tt": "node build/dev-server.js tt", 16 | "start:tt": "npm run dev:tt", 17 | "build:tt": "node build/build.js tt", 18 | "dev:my": "node build/dev-server.js my", 19 | "start:my": "npm run dev:my", 20 | "build:my": "node build/build.js my", 21 | "dev": "node build/dev-server.js wx", 22 | "start": "npm run dev", 23 | "build": "node build/build.js wx" 24 | }, 25 | "dependencies": { 26 | "flyio": "^0.6.14", 27 | "js-file-download": "^0.4.12", 28 | "mpvue": "^2.0.0", 29 | "mpvue-wxparse": "^0.6.5", 30 | "vuex": "^3.0.1", 31 | "vuex-persistedstate": "^2.5.4", 32 | "weixin-js-sdk": "^1.4.0-test" 33 | }, 34 | "devDependencies": { 35 | "babel-cli": "^6.26.0", 36 | "babel-core": "^6.22.1", 37 | "babel-loader": "^7.1.1", 38 | "babel-plugin-transform-runtime": "^6.22.0", 39 | "babel-preset-env": "^1.3.2", 40 | "babel-preset-es2015": "^6.24.1", 41 | "babel-preset-stage-2": "^6.22.0", 42 | "babel-register": "^6.22.0", 43 | "chalk": "^2.4.0", 44 | "connect-history-api-fallback": "^1.3.0", 45 | "copy-webpack-plugin": "^4.5.1", 46 | "css-loader": "^0.28.11", 47 | "cssnano": "^3.10.0", 48 | "eventsource-polyfill": "^0.9.6", 49 | "express": "^4.16.3", 50 | "extract-text-webpack-plugin": "^3.0.2", 51 | "file-loader": "^1.1.11", 52 | "friendly-errors-webpack-plugin": "^1.7.0", 53 | "glob": "^7.1.2", 54 | "html-webpack-plugin": "^3.2.0", 55 | "http-proxy-middleware": "^0.18.0", 56 | "mkdirp": "^0.5.1", 57 | "mpvue-loader": "^2.0.0", 58 | "mpvue-template-compiler": "^2.0.0", 59 | "mpvue-webpack-target": "^1.0.3", 60 | "node-sass": "^4.14.1", 61 | "optimize-css-assets-webpack-plugin": "^3.2.0", 62 | "ora": "^2.0.0", 63 | "portfinder": "^1.0.13", 64 | "postcss-loader": "^2.1.4", 65 | "postcss-mpvue-wxss": "^1.0.0", 66 | "prettier": "~1.12.1", 67 | "px2rpx-loader": "^0.1.10", 68 | "relative": "^3.0.2", 69 | "rimraf": "^2.6.0", 70 | "sass-loader": "^7.3.1", 71 | "semver": "^5.3.0", 72 | "shelljs": "^0.8.1", 73 | "uglifyjs-webpack-plugin": "^1.2.5", 74 | "url-loader": "^1.0.1", 75 | "vue-style-loader": "^4.1.0", 76 | "webpack": "^3.11.0", 77 | "webpack-bundle-analyzer": "^2.2.1", 78 | "webpack-dev-middleware-hard-disk": "^1.12.0", 79 | "webpack-merge": "^4.1.0", 80 | "webpack-mpvue-asset-plugin": "^2.0.0", 81 | "webpack-mpvue-vendor-plugin": "^2.0.0" 82 | }, 83 | "engines": { 84 | "node": ">= 4.0.0", 85 | "npm": ">= 3.0.0" 86 | }, 87 | "browserslist": [ 88 | "> 1%", 89 | "last 2 versions", 90 | "not ie <= 8" 91 | ] 92 | } 93 | -------------------------------------------------------------------------------- /package.swan.json: -------------------------------------------------------------------------------- 1 | { 2 | "appid": "touristappid", 3 | "setting": { 4 | "urlCheck": false 5 | }, 6 | "condition": { 7 | "swan": { 8 | "current": -1, 9 | "list": [] 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "项目配置文件。", 3 | "setting": { 4 | "urlCheck": false, 5 | "es6": true, 6 | "enhance": false, 7 | "postcss": true, 8 | "preloadBackgroundData": false, 9 | "minified": true, 10 | "newFeature": true, 11 | "coverView": true, 12 | "nodeModules": false, 13 | "autoAudits": false, 14 | "showShadowRootInWxmlPanel": true, 15 | "scopeDataCheck": false, 16 | "uglifyFileName": false, 17 | "checkInvalidKey": true, 18 | "checkSiteMap": true, 19 | "uploadWithSourceMap": true, 20 | "compileHotReLoad": false, 21 | "useMultiFrameRuntime": true, 22 | "useApiHook": true, 23 | "useApiHostProcess": false, 24 | "babelSetting": { 25 | "ignore": [], 26 | "disablePlugins": [], 27 | "outputPath": "" 28 | }, 29 | "enableEngineNative": false, 30 | "bundle": false, 31 | "useIsolateContext": true, 32 | "useCompilerModule": false, 33 | "userConfirmedUseCompilerModuleSwitch": false, 34 | "userConfirmedBundleSwitch": false, 35 | "packNpmManually": false, 36 | "packNpmRelationList": [], 37 | "minifyWXSS": true 38 | }, 39 | "miniprogramRoot": "dist/wx/", 40 | "compileType": "miniprogram", 41 | "appid": "wx3fe71aea5a30b03c", 42 | "projectname": "%E6%99%93%E7%99%BE%E5%90%88", 43 | "simulatorType": "wechat", 44 | "simulatorPluginLibVersion": {}, 45 | "libVersion": "2.13.1", 46 | "condition": { 47 | "search": { 48 | "list": [] 49 | }, 50 | "conversation": { 51 | "list": [] 52 | }, 53 | "plugin": { 54 | "list": [] 55 | }, 56 | "game": { 57 | "currentL": -1, 58 | "list": [] 59 | }, 60 | "gamePlugin": { 61 | "list": [] 62 | }, 63 | "miniprogram": { 64 | "list": [ 65 | { 66 | "id": -1, 67 | "name": "pages/goods/main", 68 | "pathName": "pages/goods/main", 69 | "query": "", 70 | "scene": null 71 | }, 72 | { 73 | "id": -1, 74 | "name": "pages/cart/main", 75 | "pathName": "pages/cart/main", 76 | "query": "", 77 | "scene": null 78 | }, 79 | { 80 | "id": -1, 81 | "name": "pages/goods/main", 82 | "pathName": "pages/orderlist/main", 83 | "query": "", 84 | "scene": null 85 | }, 86 | { 87 | "id": -1, 88 | "name": "pages/orderlist/main", 89 | "pathName": "pages/orderDetail/main", 90 | "query": "", 91 | "scene": null 92 | }, 93 | { 94 | "id": -1, 95 | "name": "pages/orderDetail/main", 96 | "pathName": "pages/orderlist/main", 97 | "query": "", 98 | "scene": null 99 | }, 100 | { 101 | "id": -1, 102 | "name": "pages/index/main", 103 | "pathName": "pages/index/main", 104 | "scene": null 105 | } 106 | ] 107 | } 108 | } 109 | } -------------------------------------------------------------------------------- /project.swan.json: -------------------------------------------------------------------------------- 1 | { 2 | "appid": "testappid", 3 | "setting": { 4 | "urlCheck": false 5 | }, 6 | "condition": { 7 | "swan": { 8 | "current": -1, 9 | "list": [] 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 71 | 72 | 92 | -------------------------------------------------------------------------------- /src/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | "pages/index/main", 4 | "pages/introduce/main", 5 | "pages/bargainDetail/main", 6 | "pages/bargainList/main", 7 | "pages/goods/main", 8 | "pages/groupList/main", 9 | "pages/payment/main", 10 | "pages/orderlist/main", 11 | "pages/groupProductDetail/main", 12 | "pages/bargainProductList/main", 13 | "pages/bargainProductDetail/main", 14 | "pages/inviteCode/main", 15 | "pages/myVouchers/main", 16 | "pages/prelogin/main", 17 | "pages/bargain/main", 18 | "pages/shopInfo/main", 19 | "pages/seckill/main", 20 | "pages/dayGoods/main", 21 | "pages/areaZone/main", 22 | "pages/faddish/main", 23 | "pages/vouchers/main", 24 | "pages/newPeople/main", 25 | "pages/sourceArea/main", 26 | "pages/walletDetails/main", 27 | "pages/myBankCard/main", 28 | "pages/addBankCard/main", 29 | "pages/manager/main", 30 | "pages/managerWallet/main", 31 | "pages/memberCenter/main", 32 | "pages/personal/main", 33 | "pages/myCoupons/main", 34 | "pages/seckillDetail/main", 35 | "pages/invited/main", 36 | "pages/itemList/main", 37 | "pages/cart/main", 38 | "pages/orderDetail/main", 39 | "pages/selectAddress/main", 40 | "pages/login/main", 41 | "pages/createOrder/main", 42 | "pages/addresslist/main", 43 | "pages/address/main", 44 | "pages/goodsDetail/main", 45 | "pages/articleDetail/main", 46 | "pages/counter/main", 47 | "pages/logs/main", 48 | "pages/goodsList/main", 49 | "pages/content/main", 50 | "pages/userLogin/main", 51 | "pages/send/main", 52 | "pages/regist/main", 53 | "pages/forgetPassword/main", 54 | "pages/logistic/main", 55 | "pages/footprint/main", 56 | "pages/myCollection/main", 57 | "pages/myEvaluate/main", 58 | "pages/evaluate/main" 59 | ], 60 | "window": { 61 | "backgroundTextStyle": "dark", 62 | 63 | "navigationBarBackgroundColor": "#fff", 64 | "navigationBarTitleText": "晓百合智慧商城", 65 | "navigationBarTextStyle": "black", 66 | "enablePullDownRefresh":true, 67 | "onReachBottomDistance":50 68 | 69 | }, 70 | 71 | "plugins": { 72 | "live-player-plugin": { 73 | "version": "1.1.1", 74 | "provider": "wx2b03c6e691cd7370" 75 | } 76 | }, 77 | "tabBar": { 78 | "color": "#999", 79 | "backgroundColor": "#fff", 80 | "selectedColor": "#333", 81 | "borderStyle": "white", 82 | "list": [{ 83 | "text": "首页", 84 | "pagePath": "pages/index/main", 85 | "iconPath": "static/tabs/home.png", 86 | "selectedIconPath": "static/tabs/home-active.png" 87 | }, { 88 | "text": "分类", 89 | "pagePath": "pages/goods/main", 90 | "iconPath": "static/tabs/goods.png", 91 | "selectedIconPath": "static/tabs/goods-active.png" 92 | },{ 93 | "text": "直播", 94 | "pagePath": "pages/articleDetail/main", 95 | "iconPath": "static/tabs/message.png", 96 | "selectedIconPath": "static/tabs/message-active.png" 97 | },{ 98 | "text": "购物车", 99 | "pagePath": "pages/cart/main", 100 | "iconPath": "static/tabs/cart.png", 101 | "selectedIconPath": "static/tabs/cart-active.png" 102 | }, { 103 | "text": "我的", 104 | "pagePath": "pages/personal/main", 105 | "iconPath": "static/tabs/personal.png", 106 | "selectedIconPath": "static/tabs/personal-active.png" 107 | } 108 | ], 109 | "position": "bottom" 110 | } 111 | } -------------------------------------------------------------------------------- /src/components/banners.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 147 | 148 | 164 | -------------------------------------------------------------------------------- /src/components/card.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | 4 | import fly from "./utils/request"; 5 | import store from "./store" 6 | 7 | import '../static/colorui/animation.wxss' 8 | import '../static/colorui/main.wxss' 9 | import '../static/colorui/icon.wxss' 10 | import '../static/iconfont/iconfont.wxss' 11 | import './style/main.css' 12 | import qs from 'qs'; 13 | Vue.prototype.$qs = qs; 14 | 15 | Vue.config.productionTip = false 16 | Vue.prototype.$fly = fly; 17 | Vue.prototype.$store = store 18 | //Vue.prototype.$staticUrl = "http://static.golang365.com/"; 19 | App.mpType = 'app' 20 | const app = new Vue(App) 21 | app.$mount() 22 | var backcolor = "#3197ed" //设置初始值 23 | var background 24 | globalData: { 25 | background: backcolor 26 | } 27 | -------------------------------------------------------------------------------- /src/pages/addBankCard/index.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 101 | 102 | 137 | -------------------------------------------------------------------------------- /src/pages/addBankCard/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/addBankCard/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh": false 3 | } -------------------------------------------------------------------------------- /src/pages/address/index.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 133 | 134 | 142 | -------------------------------------------------------------------------------- /src/pages/address/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/addresslist/index.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 132 | 133 | 167 | -------------------------------------------------------------------------------- /src/pages/addresslist/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./index"; 3 | 4 | const app = new Vue(App); 5 | app.$mount(); 6 | -------------------------------------------------------------------------------- /src/pages/areaZone/index.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 155 | 251 | -------------------------------------------------------------------------------- /src/pages/areaZone/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/articleDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/bargain/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/bargainDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/bargainList/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/bargainProductDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/bargainProductList/index.vue: -------------------------------------------------------------------------------- 1 |       2 | 29 | 30 | 102 | 103 | -------------------------------------------------------------------------------- /src/pages/bargainProductList/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/cart/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/content/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 23 | -------------------------------------------------------------------------------- /src/pages/content/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/counter/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 31 | 32 | 45 | -------------------------------------------------------------------------------- /src/pages/counter/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/counter/store.js: -------------------------------------------------------------------------------- 1 | // https://vuex.vuejs.org/zh-cn/intro.html 2 | // make sure to call Vue.use(Vuex) if using a module system 3 | import Vue from 'vue' 4 | import Vuex from 'vuex' 5 | 6 | Vue.use(Vuex) 7 | 8 | const store = new Vuex.Store({ 9 | state: { 10 | count: 0 11 | }, 12 | mutations: { 13 | increment: (state) => { 14 | const obj = state 15 | obj.count += 1 16 | }, 17 | decrement: (state) => { 18 | const obj = state 19 | obj.count -= 1 20 | } 21 | } 22 | }) 23 | 24 | export default store 25 | -------------------------------------------------------------------------------- /src/pages/createOrder/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/dayGoods/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/evaluate/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | 5 | const app = new Vue(App) 6 | app.$mount() 7 | -------------------------------------------------------------------------------- /src/pages/evaluate/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":false 3 | } -------------------------------------------------------------------------------- /src/pages/faddish/index.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 93 | 149 | -------------------------------------------------------------------------------- /src/pages/faddish/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/footprint/index.vue: -------------------------------------------------------------------------------- 1 |  26 | 27 | 165 | 166 | 206 | -------------------------------------------------------------------------------- /src/pages/footprint/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/footprint/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":false, 3 | "navigationBarTitleText": "我的足迹" 4 | } -------------------------------------------------------------------------------- /src/pages/forgetPassword/index.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 155 | 156 | 219 | -------------------------------------------------------------------------------- /src/pages/forgetPassword/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/goods/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/goods/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":true 3 | } -------------------------------------------------------------------------------- /src/pages/goodsDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/goodsList/index.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 151 | 188 | -------------------------------------------------------------------------------- /src/pages/goodsList/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/groupList/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/groupProductDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/index/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | // add this to handle exception 5 | Vue.config.errorHandler = function (err) { 6 | if (console && console.error) { 7 | console.error(err) 8 | } 9 | } 10 | 11 | const app = new Vue(App) 12 | app.$mount() 13 | -------------------------------------------------------------------------------- /src/pages/index/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationStyle":"custom" 3 | } -------------------------------------------------------------------------------- /src/pages/introduce/index1.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 130 | 131 | 253 | -------------------------------------------------------------------------------- /src/pages/introduce/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/introduce/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":false 3 | } -------------------------------------------------------------------------------- /src/pages/inviteCode/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/invited/index.vue: -------------------------------------------------------------------------------- 1 |  35 | 36 | 96 | 97 | 163 | -------------------------------------------------------------------------------- /src/pages/invited/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/itemList/index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 119 | 156 | -------------------------------------------------------------------------------- /src/pages/itemList/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/login/index.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 124 | 125 | 135 | -------------------------------------------------------------------------------- /src/pages/login/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/logistic/index.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 113 | 114 | 281 | -------------------------------------------------------------------------------- /src/pages/logistic/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/logs/index.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 50 | 51 | 62 | -------------------------------------------------------------------------------- /src/pages/logs/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/logs/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "查看启动日志" 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/manager/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 72 | 73 | 78 | -------------------------------------------------------------------------------- /src/pages/manager/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/managerWallet/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/memberCenter/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/memberCenter/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":false, 3 | "navigationStyle":"custom" 4 | } -------------------------------------------------------------------------------- /src/pages/myBankCard/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 56 | 57 | 96 | -------------------------------------------------------------------------------- /src/pages/myBankCard/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/myBankCard/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh": false 3 | } -------------------------------------------------------------------------------- /src/pages/myCollection/index.vue: -------------------------------------------------------------------------------- 1 |  25 | 26 | 146 | 147 | 187 | -------------------------------------------------------------------------------- /src/pages/myCollection/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/myCollection/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":false, 3 | "navigationBarTitleText": "我的收藏" 4 | } -------------------------------------------------------------------------------- /src/pages/myCoupons/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/myEvaluate/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/myVouchers/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/newPeople/index.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 75 | 192 | -------------------------------------------------------------------------------- /src/pages/newPeople/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/orderDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/orderlist/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/payment/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/personal/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/prelogin/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/regist/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | 5 | const app = new Vue(App) 6 | app.$mount() 7 | -------------------------------------------------------------------------------- /src/pages/seckill/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/seckillDetail/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/selectAddress/index.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 95 | 96 | 133 | -------------------------------------------------------------------------------- /src/pages/selectAddress/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./index"; 3 | 4 | const app = new Vue(App); 5 | app.$mount(); 6 | -------------------------------------------------------------------------------- /src/pages/send/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/shopInfo/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/shopInfo/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh": false 3 | } -------------------------------------------------------------------------------- /src/pages/sourceArea/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/userLogin/login.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 112 | 113 | 162 | -------------------------------------------------------------------------------- /src/pages/userLogin/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './login' 3 | 4 | 5 | const app = new Vue(App) 6 | app.$mount() 7 | -------------------------------------------------------------------------------- /src/pages/userLogin/uni.scss: -------------------------------------------------------------------------------- 1 | 2 | /* 页面左右间距 */ 3 | $page-row-spacing: 30upx; 4 | $page-color-base: #f8f8f8; 5 | $page-color-light: #f8f6fc; 6 | $base-color: #fa436a; 7 | 8 | /* 文字尺寸 */ 9 | $font-sm: 24upx; 10 | $font-base: 28upx; 11 | $font-lg: 32upx; 12 | /*文字颜色*/ 13 | $font-color-dark: #303133; 14 | $font-color-base: #606266; 15 | $font-color-light: #909399; 16 | $font-color-disabled: #C0C4CC; 17 | $font-color-spec: #4399fc; 18 | /* 边框颜色 */ 19 | $border-color-dark: #DCDFE6; 20 | $border-color-base: #E4E7ED; 21 | $border-color-light: #EBEEF5; 22 | /* 图片加载中颜色 */ 23 | $image-bg-color: #eee; 24 | /* 行为相关颜色 */ 25 | $uni-color-primary:#fa436a; 26 | $uni-color-success: #4cd964; 27 | $uni-color-warning: #f0ad4e; 28 | $uni-color-error: #dd524d; 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/pages/vouchers/index.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 140 | 141 | 235 | -------------------------------------------------------------------------------- /src/pages/vouchers/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/walletDetails/index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 92 | 93 | 106 | -------------------------------------------------------------------------------- /src/pages/walletDetails/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/walletDetails/main.json: -------------------------------------------------------------------------------- 1 | { 2 | "enablePullDownRefresh":false 3 | } -------------------------------------------------------------------------------- /src/sdk.js: -------------------------------------------------------------------------------- 1 | import wx from 'weixin-js-sdk' //微信sdk依赖 2 | import axios from 'axios'; // 引用全局 3 | const jsApiList = ['onMenuShareAppMessage', 'onMenuShareTimeline', 'onMenuShareQQ','onMenuShareWeibo'] 4 | //要用到微信API 5 | function getJSSDK(url,dataForWeixin) { 6 | // 调用后台接口换取参数 7 | axios.get(process.env.BASE_API + 'xxxxxxxx', { 8 | params: { 9 | url: url 10 | }, 11 | }).then(res => { 12 | //console.log(res.data.data); 13 | wx.config({ 14 | debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 15 | appId: res.data.data.appId, // 必填,公众号的唯一标识 16 | timestamp: res.data.data.timestamp, // 必填,生成签名的时间戳 17 | nonceStr: res.data.data.nonceStr, // 必填,生成签名的随机串 18 | signature: res.data.data.signature, // 必填,签名 19 | jsApiList: jsApiList // 必填,需要使用的JS接口列表 20 | }) 21 | wx.ready(function () { 22 | wx.onMenuShareAppMessage({ 23 | title: dataForWeixin.title, 24 | desc: dataForWeixin.desc, 25 | link: dataForWeixin.linkurl, 26 | imgUrl: dataForWeixin.img, 27 | trigger: function trigger(res) { }, 28 | success: function success(res) { 29 | //console.log('已分享'); 30 | }, 31 | cancel: function cancel(res) { 32 | //console.log('已取消'); 33 | }, 34 | fail: function fail(res) { 35 | alert(JSON.stringify(res)); 36 | } 37 | }); 38 | // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口 39 | wx.onMenuShareTimeline({ 40 | title: dataForWeixin.title, 41 | link: dataForWeixin.linkurl, 42 | imgUrl: dataForWeixin.img, 43 | trigger: function trigger(res) { 44 | // alert('用户点击分享到朋友圈'); 45 | }, 46 | success: function success(res) { 47 | //alert('已分享'); 48 | }, 49 | cancel: function cancel(res) { 50 | //alert('已取消'); 51 | }, 52 | fail: function fail(res) { 53 | alert(JSON.stringify(res)); 54 | } 55 | }); 56 | // 2.3 监听“分享到QQ”按钮点击、自定义分享内容及分享结果接口 57 | wx.onMenuShareQQ({ 58 | title: dataForWeixin.title, 59 | desc: dataForWeixin.desc, 60 | link: dataForWeixin.linkurl, 61 | imgUrl: dataForWeixin.img, 62 | trigger: function trigger(res) { 63 | //alert('用户点击分享到QQ'); 64 | }, 65 | complete: function complete(res) { 66 | alert(JSON.stringify(res)); 67 | }, 68 | success: function success(res) { 69 | //alert('已分享'); 70 | }, 71 | cancel: function cancel(res) { 72 | //alert('已取消'); 73 | }, 74 | fail: function fail(res) { 75 | //alert(JSON.stringify(res)); 76 | } 77 | }); 78 | // 2.4 监听“分享到微博”按钮点击、自定义分享内容及分享结果接口 79 | wx.onMenuShareWeibo({ 80 | title: dataForWeixin.title, 81 | desc: dataForWeixin.desc, 82 | link: dataForWeixin.linkurl, 83 | imgUrl: dataForWeixin.img, 84 | trigger: function trigger(res) { 85 | //alert('用户点击分享到微博'); 86 | }, 87 | complete: function complete(res) { 88 | // alert(JSON.stringify(res)); 89 | }, 90 | success: function success(res) { 91 | //alert('已分享'); 92 | }, 93 | cancel: function cancel(res) { 94 | // alert('已取消'); 95 | }, 96 | fail: function fail(res) { 97 | // alert(JSON.stringify(res)); 98 | //console.log(JSON.stringify(res)); 99 | } 100 | }); 101 | }) 102 | wx.error(function (res) { 103 | //console.log(JSON.stringify(res)+"微信验证失败"); 104 | // alert(JSON.stringify(res)+"微信验证失败"); 105 | }); 106 | }) 107 | } 108 | export default { 109 | // 获取JSSDK 110 | getJSSDK: getJSSDK 111 | } -------------------------------------------------------------------------------- /src/server/api.js: -------------------------------------------------------------------------------- 1 | import fly from "../utils/request"; 2 | 3 | export const addAddress = data => { 4 | return fly.post("/address/add", data).then(); 5 | }; 6 | 7 | export const getAddressList = data => { 8 | return fly.post("/address/list", data).then(); 9 | }; 10 | -------------------------------------------------------------------------------- /src/sitemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules":[{ 3 | "action": "allow", 4 | "page": "*" 5 | }] 6 | } -------------------------------------------------------------------------------- /src/store/actions.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/src/store/actions.js -------------------------------------------------------------------------------- /src/store/getters.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/src/store/getters.js -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | import createPersistedState from "vuex-persistedstate"; 5 | 6 | import actions from "./actions.js"; 7 | import getters from "./getters.js"; 8 | // import mutations from './mutations.js' 9 | 10 | Vue.use(Vuex) 11 | 12 | const state = { 13 | isLogin: false, 14 | userInfo: { 15 | nickName: "", 16 | avatarUrl: "" 17 | }, 18 | loginData: {}, 19 | cart: 0, 20 | cartList: [], 21 | orderGoods: [], 22 | cartPrice: 0, 23 | cartCount: () => { 24 | let sum = 0 25 | // state.cartList.forEach(item => { 26 | // sum += item.count; 27 | // }); 28 | return sum 29 | } 30 | }; 31 | 32 | export default new Vuex.Store({ 33 | state, 34 | getters, 35 | actions, 36 | mutations: { 37 | update(state, config) { 38 | Object.keys(config).map((item, key) => { 39 | state[item] = config[item] 40 | }) 41 | } 42 | }, 43 | plugins: [ 44 | createPersistedState({ 45 | storage: { 46 | getItem: key => wx.getStorageSync(key), 47 | setItem: (key, value) => wx.setStorageSync(key, value), 48 | removeItem: key => wx.removeStorageSync(key) 49 | } 50 | }) 51 | ] 52 | }); -------------------------------------------------------------------------------- /src/store/mutations.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/src/store/mutations.js -------------------------------------------------------------------------------- /src/style/main.css: -------------------------------------------------------------------------------- 1 | .bg-no{ 2 | background-color: transparent !important; 3 | color: #fff; 4 | } 5 | .descp{ 6 | display: -webkit-box; 7 | overflow: hidden; 8 | text-overflow: ellipsis; 9 | word-wrap: break-word; 10 | white-space: normal !important; 11 | -webkit-line-clamp: 2; 12 | -webkit-box-orient: vertical; 13 | } 14 | .position { 15 | position: relative; 16 | } 17 | page { 18 | background-color: #f8f8f8; 19 | } -------------------------------------------------------------------------------- /src/utils/base64src.js: -------------------------------------------------------------------------------- 1 | const fsm = wx.getFileSystemManager(); 2 | const FILE_BASE_NAME = 'tmp_base64src'; //自定义文件名 3 | 4 | function base64src(base64data, cb) { 5 | const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || []; 6 | if (!format) { 7 | return (new Error('ERROR_BASE64SRC_PARSE')); 8 | } 9 | const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`; 10 | const buffer = wx.base64ToArrayBuffer(bodyData); 11 | fsm.writeFile({ 12 | filePath, 13 | data: buffer, 14 | encoding: 'base64', 15 | success() { 16 | cb(filePath); 17 | }, 18 | fail() { 19 | return (new Error('ERROR_BASE64SRC_WRITE')); 20 | }, 21 | }); 22 | }; 23 | 24 | export { base64src }; -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | function formatNumber (n) { 2 | const str = n.toString() 3 | return str[1] ? str : `0${str}` 4 | } 5 | 6 | export function formatTime (date) { 7 | const year = date.getFullYear() 8 | const month = date.getMonth() + 1 9 | const day = date.getDate() 10 | 11 | const hour = date.getHours() 12 | const minute = date.getMinutes() 13 | const second = date.getSeconds() 14 | 15 | const t1 = [year, month, day].map(formatNumber).join('/') 16 | const t2 = [hour, minute, second].map(formatNumber).join(':') 17 | 18 | return `${t1} ${t2}` 19 | } 20 | 21 | 22 | export function moneyFormat(value) { 23 | let v = Number(value / 100); 24 | return v.toFixed(2); 25 | } 26 | 27 | 28 | export default { 29 | formatNumber, 30 | formatTime, 31 | moneyFormat 32 | }; 33 | -------------------------------------------------------------------------------- /src/utils/request.js: -------------------------------------------------------------------------------- 1 | const Fly = require("flyio/dist/npm/wx"); 2 | const fly = new Fly(); 3 | const host = "https://api.zcbaihe.com/capp/v1"; 4 | // const host = "http://192.168.5.250:9000/capp/v1"; 5 | 6 | // 添加请求拦截器 7 | fly.interceptors.request.use(request => { 8 | wx.showLoading({ 9 | title: '加载中', 10 | }) 11 | 12 | setTimeout(function () { 13 | wx.hideLoading() 14 | }, 500) 15 | //console.log("request",request) 16 | return request; 17 | }); 18 | 19 | // 添加响应拦截器 20 | fly.interceptors.response.use( 21 | response => { 22 | //console.log("response", response.data) 23 | if (response.data.success||response.data.openid) { 24 | return response; // 请求成功之后将返回值返回 25 | } else { 26 | if(response.data.errmsg){ 27 | return response; 28 | }else{ 29 | wx.showToast({ 30 | title: response.data.message, 31 | icon: "none", 32 | duration: 2000 33 | }); 34 | } 35 | } 36 | }, 37 | err => { 38 | // 请求出错,根据返回状态码判断出错原因 39 | if (err.status == 401) { 40 | wx.showToast({ 41 | title: '登录失效,请重新登录。', 42 | icon: 'none', 43 | duration: 1500, 44 | success:function(){ 45 | setTimeout(function () { 46 | wx.navigateTo({ 47 | url: "/pages/prelogin/main" 48 | }) 49 | }, 1500) 50 | } 51 | }) 52 | 53 | } 54 | } 55 | ); 56 | fly.config.baseURL = host; 57 | export default fly; 58 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/.gitkeep -------------------------------------------------------------------------------- /static/colorui/animation.wxss: -------------------------------------------------------------------------------- 1 | /* 2 | Animation 微动画 3 | 基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28 4 | */ 5 | 6 | /* css 滤镜 控制黑白底色gif的 */ 7 | .gif-black{ 8 | mix-blend-mode: screen; 9 | } 10 | .gif-white{ 11 | mix-blend-mode: multiply; 12 | } 13 | 14 | 15 | /* Animation css */ 16 | [class*=animation-] { 17 | animation-duration: .5s; 18 | animation-timing-function: ease-out; 19 | animation-fill-mode: both 20 | } 21 | 22 | .animation-fade { 23 | animation-name: fade; 24 | animation-duration: .8s; 25 | animation-timing-function: linear 26 | } 27 | 28 | .animation-scale-up { 29 | animation-name: scale-up 30 | } 31 | 32 | .animation-scale-down { 33 | animation-name: scale-down 34 | } 35 | 36 | .animation-slide-top { 37 | animation-name: slide-top 38 | } 39 | 40 | .animation-slide-bottom { 41 | animation-name: slide-bottom 42 | } 43 | 44 | .animation-slide-left { 45 | animation-name: slide-left 46 | } 47 | 48 | .animation-slide-right { 49 | animation-name: slide-right 50 | } 51 | 52 | .animation-shake { 53 | animation-name: shake 54 | } 55 | 56 | .animation-reverse { 57 | animation-direction: reverse 58 | } 59 | 60 | @keyframes fade { 61 | 0% { 62 | opacity: 0 63 | } 64 | 65 | 100% { 66 | opacity: 1 67 | } 68 | } 69 | 70 | @keyframes scale-up { 71 | 0% { 72 | opacity: 0; 73 | transform: scale(.2) 74 | } 75 | 76 | 100% { 77 | opacity: 1; 78 | transform: scale(1) 79 | } 80 | } 81 | 82 | @keyframes scale-down { 83 | 0% { 84 | opacity: 0; 85 | transform: scale(1.8) 86 | } 87 | 88 | 100% { 89 | opacity: 1; 90 | transform: scale(1) 91 | } 92 | } 93 | 94 | @keyframes slide-top { 95 | 0% { 96 | opacity: 0; 97 | transform: translateY(-100%) 98 | } 99 | 100 | 100% { 101 | opacity: 1; 102 | transform: translateY(0) 103 | } 104 | } 105 | 106 | @keyframes slide-bottom { 107 | 0% { 108 | opacity: 0; 109 | transform: translateY(100%) 110 | } 111 | 112 | 100% { 113 | opacity: 1; 114 | transform: translateY(0) 115 | } 116 | } 117 | 118 | @keyframes shake { 119 | 120 | 0%, 121 | 100% { 122 | transform: translateX(0) 123 | } 124 | 125 | 10% { 126 | transform: translateX(-9px) 127 | } 128 | 129 | 20% { 130 | transform: translateX(8px) 131 | } 132 | 133 | 30% { 134 | transform: translateX(-7px) 135 | } 136 | 137 | 40% { 138 | transform: translateX(6px) 139 | } 140 | 141 | 50% { 142 | transform: translateX(-5px) 143 | } 144 | 145 | 60% { 146 | transform: translateX(4px) 147 | } 148 | 149 | 70% { 150 | transform: translateX(-3px) 151 | } 152 | 153 | 80% { 154 | transform: translateX(2px) 155 | } 156 | 157 | 90% { 158 | transform: translateX(-1px) 159 | } 160 | } 161 | 162 | @keyframes slide-left { 163 | 0% { 164 | opacity: 0; 165 | transform: translateX(-100%) 166 | } 167 | 168 | 100% { 169 | opacity: 1; 170 | transform: translateX(0) 171 | } 172 | } 173 | 174 | @keyframes slide-right { 175 | 0% { 176 | opacity: 0; 177 | transform: translateX(100%) 178 | } 179 | 180 | 100% { 181 | opacity: 1; 182 | transform: translateX(0) 183 | } 184 | } -------------------------------------------------------------------------------- /static/colorui/components/cu-custom.js: -------------------------------------------------------------------------------- 1 | const app = getApp(); 2 | Component({ 3 | /** 4 | * 组件的一些选项 5 | */ 6 | options: { 7 | addGlobalClass: true, 8 | multipleSlots: true 9 | }, 10 | /** 11 | * 组件的对外属性 12 | */ 13 | properties: { 14 | bgColor: { 15 | type: String, 16 | default: '' 17 | }, 18 | isCustom: { 19 | type: [Boolean, String], 20 | default: false 21 | }, 22 | isBack: { 23 | type: [Boolean, String], 24 | default: false 25 | }, 26 | bgImage: { 27 | type: String, 28 | default: '' 29 | }, 30 | }, 31 | /** 32 | * 组件的初始数据 33 | */ 34 | data: { 35 | StatusBar: app.globalData.StatusBar, 36 | CustomBar: app.globalData.CustomBar, 37 | Custom: app.globalData.Custom 38 | }, 39 | /** 40 | * 组件的方法列表 41 | */ 42 | methods: { 43 | BackPage() { 44 | wx.navigateBack({ 45 | delta: 1 46 | }); 47 | }, 48 | toHome(){ 49 | wx.reLaunch({ 50 | url: '/pages/index/index', 51 | }) 52 | } 53 | } 54 | }) -------------------------------------------------------------------------------- /static/colorui/components/cu-custom.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /static/colorui/components/cu-custom.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /static/colorui/components/cu-custom.wxss: -------------------------------------------------------------------------------- 1 | /* colorui/components/cu-custom.wxss */ -------------------------------------------------------------------------------- /static/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/iconfont/iconfont.eot -------------------------------------------------------------------------------- /static/iconfont/iconfont.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "656294", 3 | "name": "晓百合小程序", 4 | "font_family": "iconfont", 5 | "css_prefix_text": "icon-", 6 | "description": "", 7 | "glyphs": [ 8 | { 9 | "icon_id": "6237075", 10 | "name": "下", 11 | "font_class": "tubiaozhizuo-", 12 | "unicode": "e607", 13 | "unicode_decimal": 58887 14 | }, 15 | { 16 | "icon_id": "4465210", 17 | "name": "菱形", 18 | "font_class": "icon", 19 | "unicode": "e601", 20 | "unicode_decimal": 58881 21 | }, 22 | { 23 | "icon_id": "577388", 24 | "name": "足迹", 25 | "font_class": "zuji", 26 | "unicode": "e767", 27 | "unicode_decimal": 59239 28 | }, 29 | { 30 | "icon_id": "798129", 31 | "name": "我的收藏", 32 | "font_class": "wodeshoucang", 33 | "unicode": "e649", 34 | "unicode_decimal": 58953 35 | }, 36 | { 37 | "icon_id": "1068814", 38 | "name": "收货地址", 39 | "font_class": "weibiaoti2fuzhi08", 40 | "unicode": "e625", 41 | "unicode_decimal": 58917 42 | }, 43 | { 44 | "icon_id": "1301389", 45 | "name": "邀请", 46 | "font_class": "yaoqing", 47 | "unicode": "e666", 48 | "unicode_decimal": 58982 49 | }, 50 | { 51 | "icon_id": "4251740", 52 | "name": "客服", 53 | "font_class": "kefu", 54 | "unicode": "e646", 55 | "unicode_decimal": 58950 56 | }, 57 | { 58 | "icon_id": "5192955", 59 | "name": "优惠券", 60 | "font_class": "youhuiquan", 61 | "unicode": "e65f", 62 | "unicode_decimal": 58975 63 | }, 64 | { 65 | "icon_id": "11372737", 66 | "name": "优惠券", 67 | "font_class": "youhuiquan1", 68 | "unicode": "e8c0", 69 | "unicode_decimal": 59584 70 | }, 71 | { 72 | "icon_id": "15494877", 73 | "name": "评价 Leo", 74 | "font_class": "pingjia-01", 75 | "unicode": "e610", 76 | "unicode_decimal": 58896 77 | }, 78 | { 79 | "icon_id": "351742", 80 | "name": "待发货", 81 | "font_class": "daifahuo", 82 | "unicode": "e602", 83 | "unicode_decimal": 58882 84 | }, 85 | { 86 | "icon_id": "1066766", 87 | "name": "评价", 88 | "font_class": "evaluate", 89 | "unicode": "e61d", 90 | "unicode_decimal": 58909 91 | }, 92 | { 93 | "icon_id": "12025983", 94 | "name": "退货退款", 95 | "font_class": "tuihuotuikuan", 96 | "unicode": "e7af", 97 | "unicode_decimal": 59311 98 | }, 99 | { 100 | "icon_id": "632980", 101 | "name": "待收货", 102 | "font_class": "daishouhuo", 103 | "unicode": "e60c", 104 | "unicode_decimal": 58892 105 | }, 106 | { 107 | "icon_id": "14112849", 108 | "name": "待付款", 109 | "font_class": "daifukuan", 110 | "unicode": "e63d", 111 | "unicode_decimal": 58941 112 | } 113 | ] 114 | } 115 | -------------------------------------------------------------------------------- /static/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /static/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/iconfont/iconfont.woff -------------------------------------------------------------------------------- /static/iconfont/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/iconfont/iconfont.woff2 -------------------------------------------------------------------------------- /static/iconfont/iconfont.wxss: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('iconfont.eot?t=1596595959724'); /* IE9 */ 3 | src: url('iconfont.eot?t=1596595959724#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAyEAAsAAAAAFYQAAAw0AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCFHAqaYJU2ATYCJANACyIABCAFhG0HgWAb8BFFBDYOABLxUWT/1wmmyDCNH9TdQEHHvmN3OiiM12n0NxLvVGK5Q59C+4cd+8DKUR+VEAkMKffWLzRCg2PsQFNP64A2d5/w8MA/NfUXjGXBIlnHD21YG7myamVlMRWzEhBxM9m6c0EohJcQ1W6vb2IKOKEmMA4oSYdnCSSeACfhtl0L/G0OeI5+Uvev0oNFehAwBAC2XKYskyFAMOX8B/my2QnL1iMyB+FBimy467B1bvfeT/eK81sfFqZu0anvr7Vdd0IOOCIX5L7lAMHD/02d7ZQs4To2OLy5a9PxLxfIhZmGtbZCIyQPhVBNGHOogMLycGAkGqMVBqOrpk6otdtzePB8gABEPr6QmZJVBEKBEwQ9dvdKMwhzOaIlDdGzas2+nUGmAKG3FnQAYHL488iH4AgBVCngF8qrSC4Dw3PkVixbdMZGwkh5MgCsDgIwgC8AHMitVS4DFoNvyM+6/rgfAEcM+wvchxKgMRy4iZEiXTcVq9zmW202eI60TZWvDPHRiH/hAaAWXdNWPJrQVdkxgAwATzPr0SYZniOuG1A8zwBiPBcQAKXBQArKgIEI1AEEQN3AgACNQUg2TQEBWTQdDHDQbmAgBK1ABiDxopIBFtLNyAASvLTGgcJ5xt9HAyAY4AuAOABhaAiIqM+SYByU0FisQLcSJlFyD08/kY52l3GhIpG3v8TTMY5WE6iEFQoEdoiY4Lh2fm7tKErFMJSQ2owT5+drikRuLKuyZo9qdd55sbj1u874uGTP0y3TVJnK2P3qxo1rXNW+tojWHU98tnKYEsNVPTQxeZZEBIkq+EHcNnbSwfWJOdOnxlg1BLsjsox3gpa/IYWSao1wg6J4x0T2602SNPJbbV6WavUAm6IqW8sTRs0lisq6kkQXyxZHDUGxDU4Ky21RbWZizSDmOT7M5GVr/XvXNdrjnZ/scjR2dVPXUazMs8yu+XT39wOJPNn4TlXlpMyMU7O045LmbKMz6Y2Nqdp4ukEwbBGD2Ba563QdotGI0+EmjgIiIeLXUw4QGie8lqhYZtxr/12cmSRM+PhVW15TsIUNVHu28xVMVRyjiCQxVNUyGcxsTJz7RqkMJscm397W+v2qGUE7NHwOIOqTgMfAWydaCjGL9FBD49dHr3+3B+0/9NibLYXDAFSp2y5CozGZrMfep6XkBfG7v5xg589eRihAFmEMrlAfIYjNgNdE79nSfGe6a8Hrn+1z9e43dp4Qf91ovCjX/kW/8N1sZV6fbnBDPZJzBFVEqF9P+0WApw0hr7hbjEpT8kwsc6AemBGEQtUCKPc6Hpn06cFV4Gst/4bOYL7617+P/EO/HgB6cVLlW2mvpOHdX6P+DL2q/sMs9VLFGAPoiNv6AzLBVXMGYR9cvTPUpxeZw8sq84I6J2FLApA7MAEuRp4fh4wQQlmA+j1GqLQR24B8qWQ8QHuxbAXEP24bnRriASaesYpdCXeSckfpAUk9o5yFZ1AnwJPiVbsblddjgD9Hjao3g8XGdJcMntpJLFCCc4rNSacZwxigaxX7VVQBi7eMEqL3y7Ac4aB2EkH5J1ZOAnzmeKlQzevMdABaG6+ruNMlRQM7YdmsE6qlV0TdRlPMlk9YREeWy/TmMDlTn3dL/2SNzCFcfBaCnwCWBvXmimPYCR47t+5vQhviBhWK3X33rNib9kLVDPx1CGgVwwfwzmhX4ylAiWLaiXmViUw/UrWQVYVFPTz4NTRokKYEvv0k2cxcMFby5i6D1PR2qs/MCRkfi8hpQygHgAzbxK+qYwR1gcGbWoWiuqCqxPJCL66zAkMBK1KOlhbfxLn7StrMLR81TwkenTcoZcf/u/6K/w9CnG+9fjXozc3d4+KcFn8RoH/4WfzXvVb+J+IYhJjUNYccT258Uy6L76zsPpTKTr6Q7tuR6SbJ844wqNOTY151LO5Z3jHEOMCxJL2wVFfD9FF2jYgsqqbLxy6vaWsoFNObwnOTM9+7fuR5xED45AddqhKyIeLZDkczp++EHPAanT+McfUru6Itovlg1QOIYt/mzWQfO5ec63dZwaRxIUq3Z2du7de6apX7c+cH3xTMi2M96DVfMIpvD5zdn69a1dqvnJs8qVWjOS5qTKDj13UqlZd6fePphEaR5rimtTphZdnWIw7oCH5zRrsMiCPQzAfdWgaBjybIp+xO2OYsPdaaNaXlaNbl+a2+h4V5fLuFM4yflUIkDz/9dIHR2ew6wKNc6+n+Iec7vIE0RmaWy2s+Yp1pCS7Q+esee2T8vsTjDZSeMuOBnoQdCwCuitMnAViNBg/WEnghzoeE60i8vagbJaqedmv27Im3qOqla2+cwCULqImnY55dOxEjmbjT/wQOV10ba69RmZWLTlwN8cuPQAfMnjUAGYDOnIP0D/U08XVhzVdgjOR/2/8SZHCjtb+3wXUqPJm41aU9UluLGAXyc9sjdDux4MuaTMf+97p1o1kOoQObleFYa7n80yNkvw3LMRBaQrlQo7dtaEAF8lF8HJetc0VJorlbtdZi2oL2mjylF0IRvR/a6z3kdq5OU0w4zyZZKyIqrEkGVf+uqiGTBaXa7n1+nJZppUlSLZTms85L7N5cChmXbpgbj1EUbgs0BMpwodhuJVq4xPdg2Qo7kQiTVehmQ3GexwoX+x0k9pMCwXZiraLZoxldqwoVkCQmikovj073JkhTqGot2uI+V7GW2G4SEJrfy1iZ037bK0ULOhrtLCpGx78YwqqTrbl53C4Zz5i0OVoTw8t2cbl51vcs4bvs9xzfbvrElPY07S47cXo7niu09Zl16vH80npx2vWXZ/hvKK6M+FgoQ1meLdIVMUVSjInjjP7jokhnZurBTA1FCCeAiOLKBfbrICs4UqZ10D6MvOi/ycYuyneWuOHTZcrg2XP+efwbPOS+5/05c7RBzPSVM3TV165VNzWZzSwB4DgiVsLas5JYKfmk0sIRz8Ci6e1Y9/DTxUbH3rL1QGeNfTD1MllJWOllVSnc9u0JXGxHvJL8NNX28/0nE77WduJTDRRZUOJR4fFtmezEg7WECSB62dTLz9atu/pkLre2vn4cN4dfsz8pacPeqoTZr1/Plt9x5eSzqeYpr6c0U6/Dd5gt3+q6H/QJycUT/fKm5s5I3l40c2UHY6eSpWFm8l5Qeaflc4bVN6k/quvMXZwKJRtfK6D4ZvNda69vdrqx8LkbVNFz+prbVBI2Q6ObVyHQNFvYAJcusQ0FLC1hC5wKiv2CMzIsI4WWrrzMIhxpyakGszQNBU4QianSrUqjqeTq4BPXxEpB/gvVlOadrw8KviiXDiV75kXZBL/PB86QFbOlZIunabhUkC+RFBRc1GfFFgpj9RczGDvlW+4zlsTWxLOJZzoDnAlRqlgqzwyOl1dIZUKT6W5HqpQk6LaoZkFCPGJAvGyI+x1/qb5HGsh7PzG4sE/NA/3SnGyRyN1xqV4X93GuYe7Hb7YyQ8pyqkPIgxH/LSqxP+iyUC0EDQewnbcKSyb2G3ZjPvY9lmHp4n4CYmE/6hwWfba9vcVG2H7b9kViKQC2sxownYy0QxjYD7iKJdqXOoJ1s191GFM1v2bF1P/e1oMO2dnqbrLob0Lxn7yaO3lxPxiWS5bKD/0iFtBfsBT+mTH8bYvhd/QY4bkMvp+ia3wLMC6SX0DVFpLmZKABBPUoAIjEIoB/YqVyuH9JQdWb+w8qqFI3CgJwAKzO6go4rL5uAsSgAxLWOLcIfCD1YDEoYABggOAUAHhDA9wIMLDZjYIUDgIG6znAYb3nJkAN72IkkhDMLRX+83zMlZegeIugMvSy20vUNBsnP4uo5zdYHlWkkcVm/xAT0iybsj63fMEMUcYOaWPbnI00kSb5SbaBcSS5RPKgc+nQvKyrymx2LDVNR8KbCCjZ9+9JnX1mpJGZWToTpe//Biw2UmLLhIfM/0CU4OqlRqnuYfzi514T3kr/ZMNqZSob0q2PyBQLn0wGo2gk0lK/lge0rORG1C/WKrqQ6cuXlxcmk+cxvkn56zPfnJgNi9Vmdzhdbo/Xx9dHTuYOFR0cHpiKM+2c8uzAHm+21ENyxFrN9nEL2KM+Y2u427Hr18u9ooCzPRvAsNgTO8bAZM4qkRuxNJ7Moyrq5qpXaJRjuoKNGlnt+JKAeezD0A9EW3AmfCTX3QhXSEcAAAAA') format('woff2'), 5 | url('iconfont.woff?t=1596595959724') format('woff'), 6 | url('iconfont.ttf?t=1596595959724') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 7 | url('iconfont.svg?t=1596595959724#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family: "iconfont" !important; 12 | font-size: 16px; 13 | font-style: normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-tubiaozhizuo-:before { 19 | content: "\e607"; 20 | } 21 | 22 | .icon-icon:before { 23 | content: "\e601"; 24 | } 25 | 26 | .icon-zuji:before { 27 | content: "\e767"; 28 | } 29 | 30 | .icon-wodeshoucang:before { 31 | content: "\e649"; 32 | } 33 | 34 | .icon-weibiaoti2fuzhi08:before { 35 | content: "\e625"; 36 | } 37 | 38 | .icon-yaoqing:before { 39 | content: "\e666"; 40 | } 41 | 42 | .icon-kefu:before { 43 | content: "\e646"; 44 | } 45 | 46 | .icon-youhuiquan:before { 47 | content: "\e65f"; 48 | } 49 | 50 | .icon-youhuiquan1:before { 51 | content: "\e8c0"; 52 | } 53 | 54 | .icon-pingjia-01:before { 55 | content: "\e610"; 56 | } 57 | 58 | .icon-daifahuo:before { 59 | content: "\e602"; 60 | } 61 | 62 | .icon-evaluate:before { 63 | content: "\e61d"; 64 | } 65 | 66 | .icon-tuihuotuikuan:before { 67 | content: "\e7af"; 68 | } 69 | 70 | .icon-daishouhuo:before { 71 | content: "\e60c"; 72 | } 73 | 74 | .icon-daifukuan:before { 75 | content: "\e63d"; 76 | } 77 | 78 | -------------------------------------------------------------------------------- /static/images/activeBtn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/activeBtn.png -------------------------------------------------------------------------------- /static/images/activety.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/activety.png -------------------------------------------------------------------------------- /static/images/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/add.png -------------------------------------------------------------------------------- /static/images/address-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/address-bg.png -------------------------------------------------------------------------------- /static/images/address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/address.png -------------------------------------------------------------------------------- /static/images/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/banner.png -------------------------------------------------------------------------------- /static/images/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/cart.png -------------------------------------------------------------------------------- /static/images/complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/complete.png -------------------------------------------------------------------------------- /static/images/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/default.png -------------------------------------------------------------------------------- /static/images/dianpu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/dianpu.png -------------------------------------------------------------------------------- /static/images/erweima.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/erweima.png -------------------------------------------------------------------------------- /static/images/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/head.png -------------------------------------------------------------------------------- /static/images/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/home.png -------------------------------------------------------------------------------- /static/images/huiyuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/huiyuan.png -------------------------------------------------------------------------------- /static/images/inviteBtn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/inviteBtn.png -------------------------------------------------------------------------------- /static/images/kanIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/kanIcon.png -------------------------------------------------------------------------------- /static/images/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/login.png -------------------------------------------------------------------------------- /static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/logo.png -------------------------------------------------------------------------------- /static/images/manjian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/manjian.png -------------------------------------------------------------------------------- /static/images/miaosha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/miaosha.png -------------------------------------------------------------------------------- /static/images/normalUserBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/normalUserBg.png -------------------------------------------------------------------------------- /static/images/obligation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/obligation.png -------------------------------------------------------------------------------- /static/images/off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/off.png -------------------------------------------------------------------------------- /static/images/on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/on.png -------------------------------------------------------------------------------- /static/images/order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/order.png -------------------------------------------------------------------------------- /static/images/pay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/pay.png -------------------------------------------------------------------------------- /static/images/person-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/person-bg.png -------------------------------------------------------------------------------- /static/images/person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/person.png -------------------------------------------------------------------------------- /static/images/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/phone.png -------------------------------------------------------------------------------- /static/images/pintuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/pintuan.png -------------------------------------------------------------------------------- /static/images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/play.png -------------------------------------------------------------------------------- /static/images/prefecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/prefecture.png -------------------------------------------------------------------------------- /static/images/prefecture1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/prefecture1.png -------------------------------------------------------------------------------- /static/images/saled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/saled.png -------------------------------------------------------------------------------- /static/images/send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/send.png -------------------------------------------------------------------------------- /static/images/sending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/sending.png -------------------------------------------------------------------------------- /static/images/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/share.png -------------------------------------------------------------------------------- /static/images/shareBtn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/shareBtn.png -------------------------------------------------------------------------------- /static/images/sheyuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/sheyuan.png -------------------------------------------------------------------------------- /static/images/shopInfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/shopInfo.png -------------------------------------------------------------------------------- /static/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/success.png -------------------------------------------------------------------------------- /static/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/user.png -------------------------------------------------------------------------------- /static/images/wallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/wallet.png -------------------------------------------------------------------------------- /static/images/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/images/wechat.png -------------------------------------------------------------------------------- /static/tabs/cart-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/cart-active.png -------------------------------------------------------------------------------- /static/tabs/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/cart.png -------------------------------------------------------------------------------- /static/tabs/goods-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/goods-active.png -------------------------------------------------------------------------------- /static/tabs/goods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/goods.png -------------------------------------------------------------------------------- /static/tabs/home-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/home-active.png -------------------------------------------------------------------------------- /static/tabs/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/home.png -------------------------------------------------------------------------------- /static/tabs/message-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/message-active.png -------------------------------------------------------------------------------- /static/tabs/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/message.png -------------------------------------------------------------------------------- /static/tabs/personal-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/personal-active.png -------------------------------------------------------------------------------- /static/tabs/personal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcwenzai/mpvue-b2c/764f8a6acd71b238980f014a318c106d0ae65977/static/tabs/personal.png --------------------------------------------------------------------------------