├── .babelrc ├── .editorconfig ├── .eslintignore ├── .gitignore ├── README.md ├── build ├── build.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js ├── prod.env.js └── test.env.js ├── demo └── vuex │ ├── demo1.html │ ├── demo2.html │ └── demo3.html ├── index.html ├── package.json ├── server ├── app.js ├── bin │ └── www ├── conf │ └── conf.js ├── malldata.sql ├── package.json ├── public │ ├── images │ │ └── 3.jpg │ └── stylesheets │ │ └── style.css ├── routes │ ├── index.js │ └── users.js ├── util │ └── util.js └── views │ ├── error.jade │ ├── index.jade │ └── layout.jade ├── src ├── App.vue ├── api │ ├── goods.js │ ├── index.js │ └── public.js ├── assets │ ├── css │ │ ├── base.css │ │ ├── checkout.css │ │ ├── goods.css │ │ ├── icomoon │ │ │ ├── fonts │ │ │ │ ├── icomoon.eot │ │ │ │ ├── icomoon.svg │ │ │ │ ├── icomoon.ttf │ │ │ │ └── icomoon.woff │ │ │ ├── selection.json │ │ │ └── style.css │ │ ├── login.css │ │ ├── modal.css │ │ ├── product.css │ │ └── productDetails.css │ ├── img │ │ ├── 1.png │ │ ├── 1b.jpg │ │ ├── 1s .jpg │ │ ├── 2.png │ │ ├── 2b.jpg │ │ ├── 2s.jpg │ │ ├── 3.png │ │ ├── 3b.jpg │ │ ├── 4.png │ │ ├── 4b.jpg │ │ ├── 5.png │ │ ├── 5b.jpg │ │ ├── car2.png │ │ ├── card.jpg │ │ ├── cart │ │ │ ├── banner.jpg │ │ │ ├── buttom.jpg │ │ │ ├── card.jpg │ │ │ ├── f.jpg │ │ │ ├── foot.jpg │ │ │ ├── icon.jpg │ │ │ ├── icon_1.jpg │ │ │ ├── icon_2.jpg │ │ │ ├── icon_3.jpg │ │ │ ├── img_1.jpg │ │ │ ├── img_2.jpg │ │ │ ├── img_3.jpg │ │ │ ├── img_4.jpg │ │ │ ├── img_5.jpg │ │ │ ├── img_6.jpg │ │ │ ├── jia.jpg │ │ │ ├── jian.jpg │ │ │ ├── lf.jpg │ │ │ ├── logo.jpg │ │ │ ├── mai.jpg │ │ │ ├── mail.jpg │ │ │ ├── mail_1.jpg │ │ │ ├── rg.jpg │ │ │ ├── shop.jpg │ │ │ └── top_img.jpg │ │ ├── ewm.gif │ │ ├── footer.png │ │ ├── gouLC.png │ │ ├── hotT │ │ │ ├── 56eb6f95Nea3fac74.jpg │ │ │ ├── 56ef639eN7e5f746a.jpg │ │ │ ├── 56f21315N2f8034ba.jpg │ │ │ ├── 56f4e102N94e7cc4f.jpg │ │ │ ├── 56f4e71eN3c1b31ee.jpg │ │ │ ├── 56f4e9b6Nb2f77ab9.jpg │ │ │ ├── 56fe1640Nd97fbaf8.jpg │ │ │ ├── 56fe3cbfN977fcdc6.jpg │ │ │ ├── 57b517b0Na190fb7f.jpg │ │ │ ├── 57b51823N413179c9.jpg │ │ │ ├── 57b519d0Nd5262347.jpg │ │ │ ├── 57b51e53Nff9658bc.jpg │ │ │ ├── 57b51f31N6cc75507.jpg │ │ │ ├── 57b51fd6N96984f3e.jpg │ │ │ ├── 57b5207fN34515ded.jpg │ │ │ ├── 57b520ffN5160f3d3.jpg │ │ │ ├── 57b5215cN34f6667b.jpg │ │ │ ├── 57b521b0Ndc532f15.jpg │ │ │ ├── 57bac14fNf77f5757.jpg │ │ │ └── 57bd3bedNd9e45548.jpg │ │ ├── icon.jpg │ │ ├── icon3.gif │ │ ├── icon3.jpg │ │ ├── icon4.gif │ │ ├── icon5.gif │ │ ├── jianjie.gif │ │ ├── jianjie.jpg │ │ ├── logo.jpg │ │ ├── phone.gif │ │ ├── pjia.png │ │ ├── shouhou.png │ │ └── title.gif │ ├── js │ │ ├── jquery-1.11.0.min.js │ │ └── productDetails.js │ ├── loading-spinning-bubbles.svg │ ├── logo.png │ └── style │ │ ├── common.scss │ │ ├── index.scss │ │ ├── mixin.scss │ │ ├── reset.scss │ │ └── theme.scss ├── components │ ├── Counter.vue │ ├── HelloWorld.vue │ ├── YButton.vue │ ├── buynum.vue │ ├── footer.vue │ ├── header.vue │ ├── insertAdr.vue │ ├── mheader.vue │ ├── mlogin.vue │ ├── modal.vue │ ├── navbread.vue │ ├── paySuc.vue │ ├── register.vue │ ├── shelf.vue │ └── slideShow.vue ├── main.js ├── page │ ├── Address.vue │ ├── AddressList.vue │ ├── Cart.vue │ ├── GoodsDetails.vue │ ├── GoodsList.vue │ ├── OrderConfirm.vue │ ├── OrderList.vue │ └── OrderSuccess.vue ├── router │ └── index.js ├── store │ └── index.js └── 备份 │ ├── components │ ├── Counter.vue │ ├── HelloWorld.vue │ ├── YButton.vue │ ├── buynum.vue │ ├── footer.vue │ ├── header.vue │ ├── insertAdr.vue │ ├── modal.vue │ ├── navbread.vue │ ├── paySuc.vue │ ├── register.vue │ ├── shelf.vue │ └── slideShow.vue │ └── page │ ├── Address.vue │ ├── AddressList.vue │ ├── Cart.vue │ ├── GoodsDetails.vue │ ├── GoodsList.vue │ ├── OrderConfirm.vue │ ├── OrderList.vue │ └── OrderSuccess.vue └── static ├── .gitkeep ├── 1.jpg ├── 10.jpg ├── 11.jpg ├── 12.jpg ├── 13.jpg ├── 14.jpg ├── 15.jpg ├── 16.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 404.png ├── 5.jpg ├── 6.jpg ├── 7.jpg ├── 8.jpg ├── 9.jpg ├── details-img ├── iphoneX.jpg ├── xiaomi-matebook.jpg ├── xiaomi-tv.jpg └── xiaomi6.jpg ├── geetest └── gt.js ├── icon.png ├── images ├── alipay@2x.png ├── bg_9b9dcb65ff.png ├── bg_9b9dcb65ff@2x.png ├── cart-empty-new.png ├── cart-empty_@2x.png ├── cart-updown_8303731e15@2x.jpg ├── checkbox-new_631a56a4f6.png ├── con-bg_04f25dbf8e.jpg ├── delete-btn-icon_a35bf2437e@2x.jpg ├── dialog-gray-bg.png ├── error.png ├── global-logo-red@2x.png ├── global-logo-red@2x.psd ├── icon.png ├── load.gif ├── no-data.png ├── no-search.png ├── other-login.png ├── payali.png ├── qqpay.png ├── qr.png ├── red.png ├── smile.png ├── support.png ├── user-avatar.png ├── wechat-explain.png ├── weixin.png └── weixinpay@2x.png ├── imooc.jpg ├── iphoneX.jpg ├── loading-svg ├── loading-balls.svg ├── loading-bars.svg ├── loading-bubbles.svg ├── loading-cubes.svg ├── loading-cylon-red.svg ├── loading-cylon.svg ├── loading-spin.svg ├── loading-spinning-bubbles.svg └── loading-spokes.svg ├── loading.gif ├── logo.png ├── logo1.png ├── mi6.jpg ├── note.jpg ├── ok-2.png ├── photo.jpg ├── pingheng.jpg ├── slide-img ├── 14766931740570.jpg ├── 15115169565977.jpg ├── 15144381201181.jpg ├── 15144443267556.jpg └── 15144482787248.jpg └── zipai.jpg /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-2"], 3 | "plugins": ["transform-runtime"], 4 | "comments": false 5 | } 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 这是一个基于vue全家桶+node.js+express+mysql实现的商城网站 2 | 3 | 注意:本项目只是一个个人demo,只用于学习交流,故不在维护! 4 | 5 | 项目github地址:[vueMall](https://github.com/wzz5304/vueMall) 6 | 7 | 如果觉得对您有帮助,您可以在右上角给我个star支持一下,谢谢! 8 | 9 | ### 项目结构 10 | 如下图所示: 11 | 12 | ![项目结构](https://user-gold-cdn.xitu.io/2018/1/17/16102c6c85f4227d?w=418&h=625&f=png&s=25028) 13 | 14 | **注**:该项目是真实的请求后台api。server为后端数据接口项目结构,运行时可以单独拿出来放在[wamp](http://www.wampserver.com/en/)/www下或者[xammp](http://rj.baidu.com/soft/detail/12489.html?ald)/htdocs 这两是集成包(apache+php+mysql...)没用过的小伙伴可以百度学习学习很容易的。当然你也可以自己单独配置Mysql环境,这个看个人习惯。**连接Mysql代码在server/conf/conf.js**大家只要将配置信息改成自己的就行。表创建**sql语句在server/malldata.sql**文件内大家可以直接复制插入就ok。我的数据库名是**malldata**,大家不一样的记得改,不懂的用数据库的小伙伴们去百度百度很容易的,基本的增删改查会就够了。 15 | 16 | ### 项目运行 17 | ``` 18 | # 克隆到本地: 19 | https://github.com/wzz5304/vueMall.git 20 | 21 | # 安装依赖: 22 | vue: 23 | .... 24 | cd vueMall(进入项目文件下) 25 | npm install (安装依赖) 26 | 27 | express:(进入项目文件下) 28 | cd server 29 | npm install(安装依赖) 30 | 31 | # 本地开发,开启服务器,浏览器访问http://localhost:8081,express监听的是3001端口http://localhost:3001(我改了监听端口) 32 | vue: 33 | npm run dev 34 | 35 | express: 36 | node bin\www 37 | 38 | # 构建生产 39 | npm run build 40 | ``` 41 | 注:第一次使用vue和express的小伙伴记得全局安装下vue-cli和express 42 | - **vue-cli** 43 | 44 | 键入命令:npm install -g vue-cli 45 | - **express** 46 | 47 | 键入命令:cnpm i -g express-generator 48 | 49 | 不懂的改后台监听端口的可以[打开](https://juejin.im/post/5a5eac7af265da3e4f0a2fba)查看,对你有帮助记得给个爱心哦,谢谢! 50 | 51 | 小伙伴们右上角狠狠给个Star吧,谢谢~ 52 | 53 | ### 项目说明 54 | - 用到的技术栈 55 | 56 | vue-cli2 + vue2.0 + vue-router + vuex + axios + stylus + scss + node.js + es6 + express + mysql 57 | - 实现功能 58 | 59 | ``` 60 | - 登录注册 61 | - 商品详情 62 | - 购物车管理 63 | - 地址管理 64 | - 模拟支付(由于调用不了支付接口) 65 | - 订单管理 66 | 67 | ``` 68 | - 功能说明 69 | ``` 70 | - 基于vue2.0 71 | - 使用vue-cli脚手架搭建项目 72 | - 使用vue-router实现路由切换 73 | - 使用vuex进行状态管理 74 | - 使用axios进行数据请求 75 | - stylus和scss编写样式 76 | - 联动滚动借助了vue-infinite-scroll插件和图片懒加载vue-lazyload插件 77 | - Express编写后台api 78 | - Mysql实现数据存储 79 | ``` 80 | ### 学习参考 81 | - vue2.0官网 [https://vuefe.cn/v2/guide/](https://vuefe.cn/v2/guide/) 82 | - npm [https://www.npmjs.com/](https://www.npmjs.com/) 83 | - ES6 [http://es6.ruanyifeng.com/](http://es6.ruanyifeng.com/) 84 | - Sticky footers [https://juejin.im/post/5a52d62a518825734c5b3c37](https://juejin.im/post/5a52d62a518825734c5b3c37) 85 | - awesome-vue [https://github.com/vuejs/awesome-vue](https://github.com/vuejs/awesome-vue) 86 | 87 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('shelljs/global') 3 | env.NODE_ENV = 'production' 4 | 5 | var path = require('path') 6 | var config = require('../config') 7 | var ora = require('ora') 8 | var webpack = require('webpack') 9 | var webpackConfig = require('./webpack.prod.conf') 10 | 11 | console.log( 12 | ' Tip:\n' + 13 | ' Built files are meant to be served over an HTTP server.\n' + 14 | ' Opening index.html over file:// won\'t work.\n' 15 | ) 16 | 17 | var spinner = ora('building for production...') 18 | spinner.start() 19 | 20 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 21 | rm('-rf', assetsPath) 22 | mkdir('-p', assetsPath) 23 | cp('-R', 'static/*', assetsPath) 24 | 25 | webpack(webpackConfig, function (err, stats) { 26 | spinner.stop() 27 | if (err) throw err 28 | process.stdout.write(stats.toString({ 29 | colors: true, 30 | modules: false, 31 | children: false, 32 | chunks: false, 33 | chunkModules: false 34 | }) + '\n') 35 | }) 36 | -------------------------------------------------------------------------------- /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 | var config = require('../config') 2 | if (!process.env.NODE_ENV) process.env.NODE_ENV = config.dev.env 3 | var path = require('path') 4 | var express = require('express') 5 | var webpack = require('webpack') 6 | var opn = require('opn') 7 | var proxyMiddleware = require('http-proxy-middleware') 8 | var webpackConfig = require('./webpack.dev.conf') 9 | 10 | // default port where dev server listens for incoming traffic 11 | var port = process.env.PORT || config.dev.port 12 | // Define HTTP proxies to your custom API backend 13 | // https://github.com/chimurai/http-proxy-middleware 14 | var proxyTable = config.dev.proxyTable 15 | 16 | var app = express() 17 | // var appData =require('../mock/goods.json') 18 | // var apiRoutes = express.Router() 19 | // apiRoutes.get('/goods',function(req,res){ 20 | // res.json({ 21 | // errno:0, 22 | // data:appData 23 | // }) 24 | // }) 25 | // app.use('/api',apiRoutes) 26 | 27 | var compiler = webpack(webpackConfig) 28 | 29 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 30 | publicPath: webpackConfig.output.publicPath, 31 | stats: { 32 | colors: true, 33 | chunks: false 34 | } 35 | }) 36 | 37 | var hotMiddleware = require('webpack-hot-middleware')(compiler) 38 | // force page reload when html-webpack-plugin template changes 39 | compiler.plugin('compilation', function (compilation) { 40 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 41 | hotMiddleware.publish({ action: 'reload' }) 42 | cb() 43 | }) 44 | }) 45 | 46 | // proxy api requests 47 | Object.keys(proxyTable).forEach(function (context) { 48 | var options = proxyTable[context] 49 | if (typeof options === 'string') { 50 | options = { target: options } 51 | } 52 | app.use(proxyMiddleware(context, options)) 53 | }) 54 | 55 | // handle fallback for HTML5 history API 56 | app.use(require('connect-history-api-fallback')()) 57 | 58 | // serve webpack bundle output 59 | app.use(devMiddleware) 60 | 61 | // enable hot-reload and state-preserving 62 | // compilation error display 63 | app.use(hotMiddleware) 64 | 65 | // serve pure static assets 66 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 67 | app.use(staticPath, express.static('./static')) 68 | 69 | var apiServer = express() 70 | var bodyParser = require('body-parser') 71 | apiServer.use(bodyParser.urlencoded({ extended: true })) 72 | apiServer.use(bodyParser.json()) 73 | var apiRouter = express.Router() 74 | var fs = require('fs') 75 | apiRouter.route('/:apiName') 76 | .all(function (req, res) { 77 | fs.readFile('./db.json', 'utf8', function (err, data) { 78 | if (err) throw err 79 | var data = JSON.parse(data) 80 | if (data[req.params.apiName]) { 81 | res.json(data[req.params.apiName]) 82 | } 83 | else { 84 | res.send('no such api name') 85 | } 86 | 87 | }) 88 | }) 89 | 90 | 91 | apiServer.use('/api', apiRouter); 92 | apiServer.listen(port + 1, function (err) { 93 | if (err) { 94 | console.log(err) 95 | return 96 | } 97 | console.log('Listening at http://localhost:' + (port + 1) + '\n') 98 | }) 99 | 100 | module.exports = app.listen(port, function (err) { 101 | if (err) { 102 | console.log(err) 103 | return 104 | } 105 | var uri = 'http://localhost:' + port 106 | console.log('Listening at ' + uri + '\n') 107 | opn(uri) 108 | }) 109 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | // generate loader string to be used with extract text plugin 15 | function generateLoaders (loaders) { 16 | var sourceLoader = loaders.map(function (loader) { 17 | var extraParamChar 18 | if (/\?/.test(loader)) { 19 | loader = loader.replace(/\?/, '-loader?') 20 | extraParamChar = '&' 21 | } else { 22 | loader = loader + '-loader' 23 | extraParamChar = '?' 24 | } 25 | return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') 26 | }).join('!') 27 | 28 | // Extract CSS when that option is specified 29 | // (which is the case during production build) 30 | if (options.extract) { 31 | return ExtractTextPlugin.extract('vue-style-loader', sourceLoader) 32 | } else { 33 | return ['vue-style-loader', sourceLoader].join('!') 34 | } 35 | } 36 | 37 | // http://vuejs.github.io/vue-loader/configurations/extract-css.html 38 | return { 39 | css: generateLoaders(['css']), 40 | postcss: generateLoaders(['css']), 41 | less: generateLoaders(['css', 'less']), 42 | sass: generateLoaders(['css', 'sass?indentedSyntax']), 43 | scss: generateLoaders(['css', 'sass']), 44 | stylus: generateLoaders(['css', 'stylus']), 45 | styl: generateLoaders(['css', 'stylus']) 46 | } 47 | } 48 | 49 | // Generate loaders for standalone style files (outside of .vue) 50 | exports.styleLoaders = function (options) { 51 | var output = [] 52 | var loaders = exports.cssLoaders(options) 53 | for (var extension in loaders) { 54 | var loader = loaders[extension] 55 | output.push({ 56 | test: new RegExp('\\.' + extension + '$'), 57 | loader: loader 58 | }) 59 | } 60 | return output 61 | } 62 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var utils = require('./utils') 4 | var projectRoot = path.resolve(__dirname, '../') 5 | 6 | var env = process.env.NODE_ENV 7 | // check env & config/index.js to decide weither to enable CSS Sourcemaps for the 8 | // various preprocessor loaders added to vue-loader at the end of this file 9 | var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap) 10 | var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap) 11 | var useCssSourceMap = cssSourceMapDev || cssSourceMapProd 12 | 13 | module.exports = { 14 | entry: { 15 | app: './src/main.js' 16 | }, 17 | output: { 18 | path: config.build.assetsRoot, 19 | publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, 20 | filename: '[name].js' 21 | }, 22 | resolve: { 23 | extensions: ['', '.js', '.vue'], 24 | fallback: [path.join(__dirname, '../node_modules')], 25 | alias: { 26 | 'vue$': 'vue/dist/vue', 27 | 'src': path.resolve(__dirname, '../src'), 28 | 'assets': path.resolve(__dirname, '../src/assets'), 29 | 'components': path.resolve(__dirname, '../src/components') 30 | } 31 | }, 32 | resolveLoader: { 33 | fallback: [path.join(__dirname, '../node_modules')] 34 | }, 35 | module: { 36 | loaders: [ 37 | { 38 | test: /\.vue$/, 39 | loader: 'vue' 40 | }, 41 | { 42 | test: /\.js$/, 43 | loader: 'babel', 44 | include: projectRoot, 45 | exclude: /node_modules/ 46 | }, 47 | { 48 | test: /\.json$/, 49 | loader: 'json' 50 | }, 51 | { 52 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 53 | loader: 'url', 54 | query: { 55 | limit: 10000, 56 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 57 | } 58 | }, 59 | { 60 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 61 | loader: 'url', 62 | query: { 63 | limit: 10000, 64 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 65 | } 66 | } 67 | ] 68 | }, 69 | vue: { 70 | loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }), 71 | postcss: [ 72 | require('autoprefixer')({ 73 | browsers: ['last 2 versions'] 74 | }) 75 | ] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var config = require('../config') 2 | var webpack = require('webpack') 3 | var merge = require('webpack-merge') 4 | var utils = require('./utils') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | 8 | // add hot-reload related code to entry chunks 9 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 10 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 11 | }) 12 | 13 | module.exports = merge(baseWebpackConfig, { 14 | module: { 15 | loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 16 | }, 17 | // eval-source-map is faster for development 18 | devtool: '#eval-source-map', 19 | plugins: [ 20 | new webpack.DefinePlugin({ 21 | 'process.env': config.dev.env 22 | }), 23 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 24 | new webpack.optimize.OccurenceOrderPlugin(), 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }) 33 | ] 34 | }) 35 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 8 | var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var env = config.build.env 10 | 11 | var webpackConfig = merge(baseWebpackConfig, { 12 | module: { 13 | loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) 14 | }, 15 | devtool: config.build.productionSourceMap ? '#source-map' : false, 16 | output: { 17 | path: config.build.assetsRoot, 18 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 19 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 20 | }, 21 | vue: { 22 | loaders: utils.cssLoaders({ 23 | sourceMap: config.build.productionSourceMap, 24 | extract: true 25 | }) 26 | }, 27 | plugins: [ 28 | // http://vuejs.github.io/vue-loader/workflow/production.html 29 | new webpack.DefinePlugin({ 30 | 'process.env': env 31 | }), 32 | new webpack.optimize.UglifyJsPlugin({ 33 | compress: { 34 | warnings: false 35 | } 36 | }), 37 | new webpack.optimize.OccurenceOrderPlugin(), 38 | // extract css into its own file 39 | new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), 40 | // generate dist index.html with correct asset hash for caching. 41 | // you can customize output by editing /index.html 42 | // see https://github.com/ampedandwired/html-webpack-plugin 43 | new HtmlWebpackPlugin({ 44 | filename: config.build.index, 45 | template: 'index.html', 46 | inject: true, 47 | minify: { 48 | removeComments: true, 49 | collapseWhitespace: true, 50 | removeAttributeQuotes: true 51 | // more options: 52 | // https://github.com/kangax/html-minifier#options-quick-reference 53 | }, 54 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 55 | chunksSortMode: 'dependency' 56 | }), 57 | // split vendor js into its own file 58 | new webpack.optimize.CommonsChunkPlugin({ 59 | name: 'vendor', 60 | minChunks: function (module, count) { 61 | // any required modules inside node_modules are extracted to vendor 62 | return ( 63 | module.resource && 64 | /\.js$/.test(module.resource) && 65 | module.resource.indexOf( 66 | path.join(__dirname, '../node_modules') 67 | ) === 0 68 | ) 69 | } 70 | }), 71 | // extract webpack runtime and module manifest to its own file in order to 72 | // prevent vendor hash from being updated whenever app bundle is updated 73 | new webpack.optimize.CommonsChunkPlugin({ 74 | name: 'manifest', 75 | chunks: ['vendor'] 76 | }) 77 | ] 78 | }) 79 | 80 | if (config.build.productionGzip) { 81 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 82 | 83 | webpackConfig.plugins.push( 84 | new CompressionWebpackPlugin({ 85 | asset: '[path].gz[query]', 86 | algorithm: 'gzip', 87 | test: new RegExp( 88 | '\\.(' + 89 | config.build.productionGzipExtensions.join('|') + 90 | ')$' 91 | ), 92 | threshold: 10240, 93 | minRatio: 0.8 94 | }) 95 | ) 96 | } 97 | 98 | module.exports = webpackConfig 99 | -------------------------------------------------------------------------------- /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 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'] 18 | }, 19 | dev: { 20 | env: require('./dev.env'), 21 | port: 8081, 22 | assetsSubDirectory: 'static', 23 | assetsPublicPath: '/', 24 | proxyTable: { 25 | // '/goods': 'http://localhost:3001/users' 26 | '/api':{ 27 | target:'http://127.0.0.1:3001', 28 | changeOrigin: true, 29 | pathRewrite: { 30 | '^/api': '', // 若target中没有/api、这里又为空,则404; 31 | } 32 | } 33 | }, 34 | // CSS Sourcemaps off by default because relative paths are "buggy" 35 | // with this option, according to the CSS-Loader README 36 | // (https://github.com/webpack/css-loader#sourcemaps) 37 | // In our experience, they generally work as expected, 38 | // just be aware of this issue when enabling this option. 39 | cssSourceMap: false 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /demo/vuex/demo1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | title 5 | 6 | 7 | 8 | 9 |
10 |

{{msg}}

11 | 12 |
13 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /demo/vuex/demo2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | title 5 | 6 | 7 | 8 | 9 |
10 |

{{msg}}

11 | 12 | 13 |
14 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /demo/vuex/demo3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | actions 5 | 6 | 7 | 8 | 9 |
10 |

{{msg}}

11 | 12 | 13 |
14 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-demo-sale-platform 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-demo-sale-platform", 3 | "version": "2.0.0", 4 | "description": "a demo sale platform use vue2.0", 5 | "author": "fishenal ", 6 | "scripts": { 7 | "dev": "node build/dev-server.js", 8 | "start": "npm run dev", 9 | "build": "node build/build.js" 10 | }, 11 | "repository": "https://github.com/fishenal/Vuejs-SalePlatform", 12 | "dependencies": { 13 | "axios": "^0.17.1", 14 | "better-scroll": "^1.5.5", 15 | "body-parser": "^1.18.2", 16 | "cookie-parser": "^1.4.3", 17 | "debug": "^3.1.0", 18 | "ejs": "^2.5.7", 19 | "express": "^4.16.2", 20 | "jade": "^1.11.0", 21 | "jquery": "^3.2.1", 22 | "js-base64": "^2.4.0", 23 | "morgan": "^1.9.0", 24 | "sass-loader": "^6.0.6", 25 | "serve-favicon": "^2.4.5", 26 | "stylus": "^0.54.5", 27 | "vue": "^2.5.2", 28 | "vue-infinite-scroll": "^2.0.2", 29 | "vue-lazyload": "^1.1.4", 30 | "vue-resource": "^1.3.4", 31 | "vue-router": "^3.0.1", 32 | "vuex": "^3.0.1" 33 | }, 34 | "devDependencies": { 35 | "autoprefixer": "^6.4.0", 36 | "babel-core": "^6.0.0", 37 | "babel-loader": "^6.0.0", 38 | "babel-plugin-transform-runtime": "^6.0.0", 39 | "babel-preset-es2015": "^6.0.0", 40 | "babel-preset-stage-2": "^6.0.0", 41 | "babel-register": "^6.0.0", 42 | "body-parser": "^1.15.2", 43 | "connect-history-api-fallback": "^1.1.0", 44 | "css-loader": "^0.25.0", 45 | "stylus-loader": "^2.1.1", 46 | "node-sass": "^4.5.3", 47 | "sass-loader": "^6.0.6", 48 | "eventsource-polyfill": "^0.9.6", 49 | "express": "^4.13.3", 50 | "extract-text-webpack-plugin": "^1.0.1", 51 | "file-loader": "^0.9.0", 52 | "function-bind": "^1.0.2", 53 | "html-webpack-plugin": "^2.8.1", 54 | "http-proxy-middleware": "^0.17.2", 55 | "json-loader": "^0.5.4", 56 | "opn": "^4.0.2", 57 | "ora": "^0.3.0", 58 | "shelljs": "^0.7.4", 59 | "url-loader": "^0.5.7", 60 | "vue-loader": "^9.4.0", 61 | "vue-style-loader": "^1.0.0", 62 | "webpack": "^1.13.2", 63 | "webpack-dev-middleware": "^1.8.3", 64 | "webpack-hot-middleware": "^2.12.2", 65 | "webpack-merge": "^0.14.1" 66 | }, 67 | "engines": { 68 | "node": ">= 4.0.0", 69 | "npm": ">= 3.0.0" 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /server/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var path = require('path'); 3 | var favicon = require('serve-favicon'); 4 | var logger = require('morgan'); 5 | var cookieParser = require('cookie-parser'); 6 | var bodyParser = require('body-parser'); 7 | 8 | var index = require('./routes/index'); 9 | var users = require('./routes/users'); 10 | 11 | var app = express(); 12 | 13 | // view engine setup 14 | app.set('views', path.join(__dirname, 'views')); 15 | app.set('view engine', 'jade'); 16 | 17 | // uncomment after placing your favicon in /public 18 | //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 19 | app.use(logger('dev')); 20 | app.use(bodyParser.json()); 21 | app.use(bodyParser.urlencoded({ extended: false })); 22 | app.use(cookieParser()); 23 | app.use(express.static(path.join(__dirname, 'public'))); 24 | 25 | app.use(function (req,res,next) { // 拦截请求 26 | if(req.cookies.userId){ 27 | next(); 28 | }else{ 29 | // console.log("url:"+req.originalUrl); 30 | if(req.originalUrl.indexOf('/users/login')>-1 || req.originalUrl.indexOf('/users/logout')>-1 || req.originalUrl.indexOf('/list')>-1 || req.originalUrl.indexOf('/getDetails')>-1 || req.originalUrl.indexOf('/users/register')>-1 || req.originalUrl.indexOf('/users/userExist')>-1 || req.originalUrl.indexOf('/searchData')>-1){ 31 | next(); 32 | }else{ 33 | res.json({ 34 | status:'10001', 35 | msg:'当前未登录', 36 | result:'' 37 | }); 38 | } 39 | } 40 | }); 41 | 42 | app.use('/', index); 43 | app.use('/users', users); 44 | 45 | // catch 404 and forward to error handler 46 | app.use(function(req, res, next) { 47 | var err = new Error('Not Found'); 48 | err.status = 404; 49 | next(err); 50 | }); 51 | 52 | // error handler 53 | app.use(function(err, req, res, next) { 54 | // set locals, only providing error in development 55 | res.locals.message = err.message; 56 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 57 | 58 | // render the error page 59 | res.status(err.status || 500); 60 | res.render('error'); 61 | }); 62 | 63 | module.exports = app; 64 | -------------------------------------------------------------------------------- /server/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('server:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3001'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /server/conf/conf.js: -------------------------------------------------------------------------------- 1 | // conf/db.js 2 | // MySQL数据库联接配置 3 | module.exports = { 4 | mysql: { 5 | host: '127.0.0.1', 6 | user: 'root', 7 | password: '', 8 | database:'malldata', // 前面建的user表位于这个数据库中 9 | port: 3306, 10 | charset:'UTF8_GENERAL_CI' 11 | } 12 | }; -------------------------------------------------------------------------------- /server/malldata.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 4.1.14 3 | -- http://www.phpmyadmin.net 4 | -- 5 | -- Host: 127.0.0.1 6 | -- Generation Time: 2018-01-13 09:32:33 7 | -- 服务器版本: 5.6.17 8 | -- PHP Version: 5.5.12 9 | 10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 11 | SET time_zone = "+00:00"; 12 | 13 | 14 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 15 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 16 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 17 | /*!40101 SET NAMES utf8 */; 18 | 19 | -- 20 | -- Database: `malldata` 21 | -- 22 | 23 | -- -------------------------------------------------------- 24 | 25 | -- 26 | -- 表的结构 `addresslist` 27 | -- 28 | drop table if exists addresslist 29 | CREATE TABLE IF NOT EXISTS `addresslist` ( 30 | `addressId` int(16) NOT NULL AUTO_INCREMENT, 31 | `userId` varchar(64) NOT NULL, 32 | `userName` varchar(64) NOT NULL, 33 | `streetName` varchar(256) NOT NULL, 34 | `postCode` int(32) NOT NULL, 35 | `tel` varchar(32) NOT NULL, 36 | `isDefault` tinyint(1) NOT NULL, 37 | PRIMARY KEY (`addressId`) 38 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; 39 | 40 | -- 41 | -- 转存表中的数据 `addresslist` 42 | -- 43 | 44 | INSERT INTO `addresslist` (`addressId`, `userId`, `userName`, `streetName`, `postCode`, `tel`, `isDefault`) VALUES 45 | (10001, '123456', '吴大大', '深圳市龙岗区万科四季花城', 518116, '18842687533', 0), 46 | (10002, '123456', '廖大大', '福建省三明市梅列区江滨号院', 366100, '18888886688', 0), 47 | (10004, '123456', '李大大', '广东省深圳市龙岗区天安云谷', 518116, '18888886611', 1), 48 | (10005, '123456', '李白', '广东省深圳市福田区篱笆旁', 88888888, '6666666', 0), 49 | (10006, '18842687533', '吴大大', '广东省深圳市龙岗区四季花城', 5611000, '18842687555', 0), 50 | (10008, '18842687533', '廖大大', '辽宁省大连市高新区因特摩尔1019', 116000, '88888888', 0), 51 | (10009, '18842687533', '余大大', '辽宁省大连市高新区数码广场软景e居2013', 116000, '66666666', 1), 52 | (10010, '18842687533', 'json', '四川省成都市天府软件园11栋20楼', 99999999, '99999999', 0); 53 | 54 | -- -------------------------------------------------------- 55 | 56 | -- 57 | -- 表的结构 `cartlist` 58 | -- 59 | drop table if exists cartlist 60 | CREATE TABLE IF NOT EXISTS `cartlist` ( 61 | `cartId` int(16) NOT NULL AUTO_INCREMENT, 62 | `userId` varchar(64) NOT NULL, 63 | `productId` int(32) NOT NULL, 64 | `productName` varchar(128) NOT NULL, 65 | `productPrice` int(32) NOT NULL, 66 | `checked` varchar(32) NOT NULL, 67 | `productNum` int(32) NOT NULL, 68 | `productImg` varchar(256) NOT NULL, 69 | `totalPrice` varchar(64) NOT NULL, 70 | PRIMARY KEY (`cartId`) 71 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; 72 | 73 | -- -------------------------------------------------------- 74 | 75 | -- 76 | -- 表的结构 `goods` 77 | -- 78 | drop table if exists goods 79 | CREATE TABLE IF NOT EXISTS `goods` ( 80 | `id` int(32) NOT NULL AUTO_INCREMENT, 81 | `productId` int(32) NOT NULL, 82 | `productName` varchar(128) NOT NULL, 83 | `productPrice` int(32) NOT NULL, 84 | `checked` varchar(32) NOT NULL DEFAULT '0', 85 | `productNum` int(32) NOT NULL, 86 | `productImg` varchar(256) NOT NULL, 87 | `sub_title` varchar(128) NOT NULL, 88 | `limit_num` int(16) NOT NULL, 89 | `desc` varchar(256) NOT NULL, 90 | `descImg` varchar(32) NOT NULL, 91 | `productDetails` varchar(126) NOT NULL, 92 | PRIMARY KEY (`id`) 93 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 94 | 95 | -- 96 | -- 转存表中的数据 `goods` 97 | -- 98 | 99 | INSERT INTO `goods` (`id`, `productId`, `productName`, `productPrice`, `checked`, `productNum`, `productImg`, `sub_title`, `limit_num`, `desc`, `descImg`, `productDetails`) VALUES 100 | (1, 10001, '小米6', 2499, '0', 0, 'mi6.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', 'xiaomi6.jpg', '小米6 全网通 4GB+64GB 亮黑色 移动联通电信4G手机 双卡双待 小米6变焦双'), 101 | (2, 10002, '小米笔记本', 3999, '0', 0, 'note.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', 'xiaomi-matebook.jpg', '小米(MI)Air 13.3英寸全金属轻薄笔记本电脑(i5-7200U 8G 256G固态硬盘 全高清屏 背光键盘 Win10)银'), 102 | (3, 10003, '小米音响', 199, '0', 0, '1.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '小米(MI)小钢炮蓝牙音箱2 迷你便携音响 户外蓝牙音响 免提通话(黑色)'), 103 | (4, 10004, 'Leme1', 1999, '0', 0, '3.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '乐视(Letv) 无线头戴式 Leme蓝牙耳机2代 EB30 无线蓝牙4.1耳机包邮 红色'), 104 | (5, 10005, '乐视盒子', 299, '0', 0, '5.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '乐视TV(Letv) 乐视盒子U4 Pro 3D 4K 四核高清电视硬盘播放器网络机顶盒 裸机版U4(不含影视会员)'), 105 | (6, 10006, '小米插座', 99, '0', 0, '6.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '小米(MI)插排插线板 多功能接线板3/5孔插座拖线板米家6位排插企业办公定制LOGO刻字 米家插线板6位基础版-白色'), 106 | (7, 10007, '小米耳机', 199, '0', 0, '7.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '小米(MI)耳机 小米活塞耳机 炫彩版 星空钛版耳机适用于红米NOTE华为系列 基础版-粉色'), 107 | (8, 10008, '小米硬盘400G', 1999, '0', 0, '8.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '小米硬盘400G'), 108 | (9, 10009, '小米智能电饭煲', 599, '0', 0, '9.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '米家(MIJIA)小米智能电饭煲 米家IH电饭煲 电磁环绕加热 4L容量 PFA粉体涂层'), 109 | (10, 10010, '小米TV', 5999, '0', 0, '10.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '做高性能的好电视,让你的娱乐体验更畅快', 'xiaomi-tv.jpg', '小米(MI)小米电视4 L55M5-AB 55英寸 2GB+8GB 4.9mm超薄 4K超高清智能液晶平板电视机(黑色)'), 110 | (11, 10011, 'Leme2', 1999, '0', 0, '4.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '乐视(Letv) 无线头戴式 Leme蓝牙耳机2代 EB30 无线蓝牙4.1耳机包邮 尊贵黑'), 111 | (12, 10012, '数据线', 59, '0', 0, '15.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '品胜(PISEN)苹果数据线 8/7/6/5s手机充电线 1.2米 白色 适用于iphone5/5s/6/6s/Plus/7/8/X/iPad/Air/Pro'), 112 | (13, 10013, '智能摄像头', 999, '0', 0, 'photo.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '萤石 EZVIZ C6升级版 摄像头 云台智能网络摄像机 语音交互 wifi远程监控防盗摄像头 家居无线摄像头ip camera 海康威视 旗下品牌'), 113 | (14, 10014, '小米平衡车', 1999, '0', 0, 'pingheng.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '小米(MI) 定制版Ninebot 九号平衡车 智能代步电动体感车(白)'), 114 | (15, 10015, '自拍杆', 34, '0', 0, 'zipai.jpg', '此仅为支付测试商品 拍下不会发货\n', 10, '', '', '荣耀自拍杆轻巧便携自拍即插即用手机通用AF11L(黑色)'), 115 | (16, 10016, 'iphoneX', 8388, '0', 0, 'iphoneX.jpg', '【256G银9088!国行正品,京东配送】', 10, '', 'iphoneX.jpg', 'Apple iPhone X (A1865) 64GB 深空灰色 移动联通电信4G手机'); 116 | 117 | -- -------------------------------------------------------- 118 | 119 | -- 120 | -- 表的结构 `orderlist` 121 | -- 122 | drop table if exists orderlist 123 | CREATE TABLE IF NOT EXISTS `orderlist` ( 124 | `orderId` varchar(128) NOT NULL, 125 | `userId` varchar(64) NOT NULL, 126 | `productId` int(32) NOT NULL, 127 | `productName` varchar(128) NOT NULL, 128 | `productPrice` int(32) NOT NULL, 129 | `productNum` int(32) NOT NULL, 130 | `productImg` varchar(256) NOT NULL, 131 | `totalPrice` varchar(64) NOT NULL, 132 | `streetName` varchar(256) NOT NULL, 133 | `postName` varchar(32) NOT NULL, 134 | `postCode` varchar(32) NOT NULL, 135 | `tel` varchar(32) NOT NULL, 136 | `itemPrice` varchar(32) NOT NULL, 137 | `discount` varchar(32) NOT NULL COMMENT '折扣', 138 | `shipPrice` varchar(32) NOT NULL COMMENT '配送费', 139 | `freightRisk` varchar(32) NOT NULL COMMENT '运费险', 140 | `createDate` varchar(32) NOT NULL, 141 | `ifPay` int(2) NOT NULL 142 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 143 | 144 | -- 145 | -- 转存表中的数据 `orderlist` 146 | -- 147 | 148 | INSERT INTO `orderlist` (`orderId`, `userId`, `productId`, `productName`, `productPrice`, `productNum`, `productImg`, `totalPrice`, `streetName`, `postName`, `postCode`, `tel`, `itemPrice`, `discount`, `shipPrice`, `freightRisk`, `createDate`, `ifPay`) VALUES 149 | ('6226201801101639364', '18842687533', 10002, '小米笔记本', 3999, 1, 'note.jpg', '3999', '辽宁省大连市高新区数码广场软景e居2013', '余大大', '116000', '66666666', '3999', '13.2', '0', '5', '2018-01-10 16:39:36', 1); 150 | 151 | -- -------------------------------------------------------- 152 | 153 | -- 154 | -- 表的结构 `user` 155 | -- 156 | drop table if exists user 157 | CREATE TABLE IF NOT EXISTS `user` ( 158 | `id` int(16) NOT NULL AUTO_INCREMENT, 159 | `userId` varchar(64) NOT NULL, 160 | `userName` varchar(64) NOT NULL, 161 | `userPwd` varchar(64) NOT NULL, 162 | `myPhoto` varchar(32) NOT NULL, 163 | PRIMARY KEY (`id`) 164 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 165 | 166 | -- 167 | -- 转存表中的数据 `user` 168 | -- 169 | 170 | INSERT INTO `user` (`id`, `userId`, `userName`, `userPwd`, `myPhoto`) VALUES 171 | (1, '123456', '冷色调16', 'qwer1234', 'user-avatar'), 172 | (6, '18842687533', '李好', 'qwer1234', ''), 173 | (8, '15506914894', '暖管~', 'qwer1234', ''), 174 | (9, '18742590628', 'json', 'qwer1234', ''); 175 | 176 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 177 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 178 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 179 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.18.2", 10 | "cookie-parser": "~1.4.3", 11 | "debug": "~2.6.9", 12 | "express": "~4.15.5", 13 | "finalhandler": "^1.1.0", 14 | "jade": "~1.11.0", 15 | "merge-descriptors": "^1.0.1", 16 | "morgan": "~1.9.0", 17 | "mysql": "^2.15.0", 18 | "serve-favicon": "~2.4.5", 19 | "mysql": "latest" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /server/public/images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/server/public/images/3.jpg -------------------------------------------------------------------------------- /server/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /server/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var mysql = require('mysql'); 4 | var $conf = require('../conf/conf'); 5 | // 使用连接池 6 | var pool = mysql.createPool($conf.mysql); 7 | router.use(express.static('public')); 8 | // 查询商品列表 9 | router.get('/list', function(req, res, next) { 10 | var sortNum = req.param('sort'); // 获取前台传过来的sort值 11 | var secContent = req.param('secContent'); 12 | var page = parseInt(req.param('page')); // 获取前台传过来的page(第几页)值 13 | var pageSize = parseInt(req.param('pageSize')); // 获取前台传过来的pageSize(每页多少条)值 14 | var priceLevel = req.param('priceLevel'); // 获取前台传过来的priceLevel(价格区间)值 15 | var pageNum = (page-1)*pageSize; 16 | var priceGt = ''; //定义价格区间 17 | var priceLte = ''; //定义价格区间 18 | if(pageNum>=0){ //用于后台接口测试 19 | pageNum = pageNum; 20 | }else{ 21 | pageNum = 0; 22 | } 23 | if(pageSize){ //用于后台接口测试 24 | pageSize = pageSize; 25 | }else{ 26 | pageSize = 5; 27 | } 28 | switch (priceLevel) { 29 | case '0': 30 | priceGt = 0; 31 | priceLte = 500; 32 | break; 33 | case '1': 34 | priceGt = 500; 35 | priceLte = 1000; 36 | break; 37 | case '2': 38 | priceGt = 1000; 39 | priceLte = 2000; 40 | break; 41 | case '3': 42 | priceGt = 2000; 43 | priceLte = 5000; 44 | break; 45 | case '4': 46 | priceGt = 5000; 47 | priceLte = 10000; 48 | break; 49 | case 'all': 50 | priceGt = 0; 51 | priceLte = 999999; 52 | break; 53 | default: 54 | priceGt = ''; 55 | priceLte = ''; 56 | break; 57 | } 58 | if(pool) { 59 | var sort = ''; 60 | if (sortNum === '1') { 61 | sort = 'asc'; 62 | }else if(sortNum === '0') { 63 | sort = 'desc'; 64 | }else{ 65 | sort = 'desc'; 66 | } 67 | if(priceLevel == 'all' && sortNum=='') { 68 | var sql = `select * from goods order by id asc limit ${pageNum},${pageSize}`; 69 | } else{ 70 | var sql = `select * from goods where productPrice>${priceGt} and productPrice<=${priceLte} order by productPrice ${sort} limit ${pageNum},${pageSize}`; 71 | } 72 | pool.query(sql,(err, result) => { 73 | if (err) { 74 | // res.send(err.message); 75 | res.json({ 76 | status:'-1', 77 | msg:err.message, 78 | pageNum:pageNum 79 | }); 80 | } else { 81 | // res.send( JSON.stringify(result)); 82 | res.json({ 83 | status:'1', 84 | msg:'', 85 | sort:sort, 86 | pageNum:pageNum, 87 | data:{ 88 | count:result.length, 89 | list:result 90 | } 91 | }); 92 | } 93 | }); 94 | console.log('succee'); 95 | }else{ 96 | console.log('err'); 97 | } 98 | }); 99 | 100 | // 搜索框接口 101 | router.get('/searchData', (req, res, next) => { 102 | var secContent = req.param('secContent'); 103 | var page = parseInt(req.param('page')); // 获取前台传过来的page(第几页)值 104 | var pageSize = parseInt(req.param('pageSize')); // 获取前台传过来的pageSize(每页多少条)值 105 | var pageNum = (page-1)*pageSize; 106 | var sql = `select * from goods where productName LIKE '%${secContent}%' or productDetails LIKE '%${secContent}%'`; 107 | pool.query(sql, (err, result) => { 108 | if(err) { 109 | res.json({ 110 | status:'-1', 111 | msg:err.message 112 | }); 113 | } else { 114 | res.json({ 115 | status:'1', 116 | msg:'', 117 | result:result 118 | }); 119 | } 120 | }); 121 | 122 | }); 123 | // 加入购物车 124 | router.get('/addCart', function (req, res) { 125 | var productId = parseInt(req.param('productId')); // 获取前台传过来的productId值 126 | var productNum = parseInt(req.param('productNum')); // 获取前台传过来的productId值 127 | // var username = '123456@qq.com'; 128 | if(pool) { 129 | var sql = `select * from goods where productId=${productId}`; 130 | pool.query(sql,(err, result) => { 131 | if (err) { 132 | res.json({ 133 | status:'-1', // 数据库连接错误 134 | msg:err.message, 135 | result:'' 136 | }); 137 | } else { 138 | /*res.json({ 139 | status:'0', 140 | msg:'', 141 | data:{ 142 | list:result 143 | } 144 | });*/ 145 | let userId = req.cookies.userId; 146 | let proId = result[0].productId; 147 | let proName = result[0].productName; 148 | let proPrice = result[0].productPrice; 149 | let checked = '1'; 150 | // let proNum = 1; 151 | let proImg = result[0].productImg; 152 | let totalMoney = proPrice*productNum; 153 | let mSql =`select * from cartlist where productId=${productId}`; 154 | pool.query(mSql, (err,result) => { 155 | if (err) { 156 | res.json({ 157 | status:'-1', 158 | msg:err.message, 159 | result:'' 160 | }); 161 | } else{ 162 | if(result.length === 0) { 163 | let sql = `insert into cartlist(userId,productId,productName,productPrice,checked,productNum,productImg,totalPrice) values('${userId}','${proId}','${proName}','${proPrice}','${checked}','${productNum}','${proImg}','${totalMoney}')`; 164 | pool.query(sql,(err,result) => { 165 | if (err) { 166 | res.json({ 167 | status:'0', 168 | msg:err.message, 169 | result:'' 170 | }); 171 | }else{ 172 | res.json({ 173 | status:'1', 174 | msg:'添加购物车成功!', 175 | result:result 176 | }); 177 | } 178 | }); 179 | } else{ 180 | let proNum = result[0].productNum + productNum; 181 | let proPrice = result[0].productPrice; 182 | let cId = result[0].cartId; 183 | let totalMoney = proNum*proPrice; 184 | let sql = `update cartlist set productNum=${proNum},totalPrice=${totalMoney} where cartId=${cId}`; 185 | pool.query(sql, (err,result) => { 186 | if(err) { 187 | res.json({ 188 | status:'0', 189 | msg:err.message, 190 | result:'' 191 | }); 192 | } else{ 193 | res.json({ 194 | status:'1', 195 | msg:'添加购物车成功!', 196 | result:'' 197 | }); 198 | } 199 | }); 200 | } 201 | } 202 | }); 203 | } 204 | }); 205 | } 206 | }); 207 | 208 | //查看商品详情 209 | router.get('/getDetails', (req,res,next) => { 210 | let productId = parseInt(req.param('productId')); // 获取前台传过来的productId值 211 | let sql = `select * from goods where productId=${productId}`; 212 | pool.query(sql, (err, result) => { 213 | if(err) { 214 | res.json({ 215 | status:'0', 216 | msg:err.message 217 | }); 218 | } else { 219 | res.json({ 220 | status:'1', 221 | msg:'', 222 | result:result 223 | }); 224 | } 225 | }); 226 | }) 227 | module.exports = router; -------------------------------------------------------------------------------- /server/util/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by jacksoft on 17/4/26. 3 | */ 4 | Date.prototype.Format = function (fmt) { 5 | var o = { 6 | "M+": this.getMonth() + 1, //月份 7 | "d+": this.getDate(), //日 8 | "h+": this.getHours(), //小时 9 | "m+": this.getMinutes(), //分 10 | "s+": this.getSeconds(), //秒 11 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度 12 | "S": this.getMilliseconds() //毫秒 13 | }; 14 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 15 | for (var k in o) 16 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 17 | return fmt; 18 | } 19 | 20 | module.exports = {}; 21 | -------------------------------------------------------------------------------- /server/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /server/views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | p Welcome to #{title} 6 | -------------------------------------------------------------------------------- /server/views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content 8 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 15 | -------------------------------------------------------------------------------- /src/api/goods.js: -------------------------------------------------------------------------------- 1 | import http from './public' 2 | // 商品列表 3 | export const getAllGoods = (params) => { 4 | return http.fetchGet('/goods/allGoods', params) 5 | } 6 | // 获取购物车列表 7 | export const getCartList = (params) => { 8 | return http.fetchPost('/member/cartList', params) 9 | } 10 | // 加入购物车 11 | export const addCart = (params) => { 12 | return http.fetchPost('/member/addCart', params) 13 | } 14 | // 删除购物车 15 | export const delCart = (params) => { 16 | return http.fetchPost('/member/delCart', params) 17 | } 18 | // 编辑购物车 19 | export const cartEdit = (params) => { 20 | return http.fetchPost('/member/cartEdit', params) 21 | } 22 | // 全选 23 | export const editCheckAll = (params) => { 24 | return http.fetchPost('/member/editCheckAll', params) 25 | } 26 | // 删除整条购物车 27 | export const cartDel = (params) => { 28 | return http.fetchPost('/member/cartDel', params) 29 | } 30 | // 获取用户地址 31 | export const addressList = (params) => { 32 | return http.fetchPost('/member/addressList', params) 33 | } 34 | // 通过id获取地址 35 | export const getAddress = (params) => { 36 | return http.fetchPost('/member/address', params) 37 | } 38 | // 修改收货地址 39 | export const addressUpdate = (params) => { 40 | return http.fetchPost('/member/updateAddress', params) 41 | } 42 | // 添加收货地址 43 | export const addressAdd = (params) => { 44 | return http.fetchPost('/member/addAddress', params) 45 | } 46 | // 删除收货地址 47 | export const addressDel = (params) => { 48 | return http.fetchPost('/member/delAddress', params) 49 | } 50 | // 生成订单 51 | export const submitOrder = (params) => { 52 | return http.fetchPost('/member/addOrder', params) 53 | } 54 | // 支付 55 | export const payMent = (params) => { 56 | return http.fetchPost('/member/payOrder', params) 57 | } 58 | // 获取用户订单 59 | export const orderList = (params) => { 60 | return http.fetchGet('/member/orderList', params) 61 | } 62 | // 获取单个订单详情 63 | export const getOrderDet = (params) => { 64 | return http.fetchGet('/member/orderDetail', params) 65 | } 66 | // 取消订单 67 | export const cancelOrder = (params) => { 68 | return http.fetchPost('/member/cancelOrder', params) 69 | } 70 | // 商品详情 71 | export const productDet = (params) => { 72 | return http.fetchGet('/goods/productDet', params) 73 | } 74 | // 删除订单 75 | export const delOrder = (params) => { 76 | return http.fetchGet('/member/delOrder', params) 77 | } 78 | // 商品列表 79 | export const getSearch = (params) => { 80 | return http.fetchGet('/goods/search', params) 81 | } 82 | // 快速搜索 83 | export const getQuickSearch = (key) => { 84 | return http.fetchQuickSearch(`http://123.207.121.135:9200/item/itemList/_search?q=productName: ${key}`) 85 | } 86 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | import http from './public' 2 | // 登陆 3 | export const userLogin = (params) => { 4 | return http.fetchPost('/member/login', params) 5 | } 6 | // 退出登陆 7 | export const loginOut = (params) => { 8 | return http.fetchGet('/member/loginOut', params) 9 | } 10 | // 用户信息 11 | export const userInfo = (params) => { 12 | return http.fetchGet('/member/checkLogin', params) 13 | } 14 | // 注册账号 15 | export const register = (params) => { 16 | return http.fetchPost('/member/register', params) 17 | } 18 | // 上传图片 19 | export const upload = (params) => { 20 | return http.fetchPost('/member/imgaeUpload', params) 21 | } 22 | // 修改头像 23 | export const updateheadimage = (params) => { 24 | return http.fetchPost('/member/updateheadimage', params) 25 | } 26 | // 捐赠列表 27 | export const thanksList = (params) => { 28 | return http.fetchGet('/member/thanks', params) 29 | } 30 | // 首页接口 31 | export const productHome = (params) => { 32 | return http.fetchGet('/goods/productHome', params) 33 | } 34 | // 极验验证码 35 | export const geetest = (params) => { 36 | return http.fetchGet('/member/geetestInit?t=' + (new Date()).getTime(), params) 37 | } 38 | 39 | -------------------------------------------------------------------------------- /src/api/public.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | axios.defaults.timeout = 10000 3 | axios.defaults.headers.post['Content-Type'] = 'application/x-www=form-urlencoded' 4 | export default { 5 | fetchGet (url, params = {}) { 6 | return new Promise((resolve, reject) => { 7 | axios.get(url, params).then(res => { 8 | resolve(res.data) 9 | }).catch(error => { 10 | reject(error) 11 | }) 12 | }) 13 | }, 14 | fetchQuickSearch (url) { 15 | return new Promise((resolve, reject) => { 16 | axios.get(url).then(res => { 17 | resolve(res.data) 18 | }).catch(error => { 19 | reject(error) 20 | }) 21 | }) 22 | }, 23 | fetchPost (url, params = {}) { 24 | return new Promise((resolve, reject) => { 25 | axios.post(url, params).then(res => { 26 | resolve(res.data) 27 | }).catch(error => { 28 | reject(error) 29 | }) 30 | }) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/assets/css/goods.css: -------------------------------------------------------------------------------- 1 | @media only screen and (min-width: 991px){ 2 | .accessory-list .main .btn-area .btn {font-size: 1.0rem; padding:0;} 3 | .accessory-list .main .btn-area .btn {width: 48%;} 4 | .accessory-list .main .btn-area .btn--m {height: 34px;line-height: 34px;} 5 | } 6 | @media only screen and (max-width: 1024px){ 7 | .accessory-list .main .btn-area .btn {font-size: 1.0rem; padding:0;} 8 | .accessory-list .main .btn-area .btn {width: 48%; letter-spacing: 0;} 9 | .accessory-list .main .btn-area .btn--m {height: 32px;line-height: 32px;} 10 | } 11 | @media only screen and (max-width: 1024px){ 12 | .accessory-list .main .btn-area{ 13 | float: none; 14 | } 15 | } -------------------------------------------------------------------------------- /src/assets/css/icomoon/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/css/icomoon/fonts/icomoon.eot -------------------------------------------------------------------------------- /src/assets/css/icomoon/fonts/icomoon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/assets/css/icomoon/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/css/icomoon/fonts/icomoon.ttf -------------------------------------------------------------------------------- /src/assets/css/icomoon/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/css/icomoon/fonts/icomoon.woff -------------------------------------------------------------------------------- /src/assets/css/icomoon/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'icomoon'; 3 | src: url('./fonts/icomoon.eot?nyfwxl'); 4 | src: url('./fonts/icomoon.eot?nyfwxl#iefix') format('embedded-opentype'), 5 | url('./fonts/icomoon.ttf?nyfwxl') format('truetype'), 6 | url('./fonts/icomoon.woff?nyfwxl') format('woff'), 7 | url('./fonts/icomoon.svg?nyfwxl#icomoon') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | [class^="icon-"], [class*=" icon-"] { 13 | /* use !important to prevent issues with browser extensions that change fonts */ 14 | font-family: 'icomoon' !important; 15 | speak: none; 16 | font-style: normal; 17 | font-weight: normal; 18 | font-variant: normal; 19 | text-transform: none; 20 | line-height: 1; 21 | 22 | /* Better Font Rendering =========== */ 23 | -webkit-font-smoothing: antialiased; 24 | -moz-osx-font-smoothing: grayscale; 25 | } 26 | 27 | .icon-close:before { 28 | content: "\e900"; 29 | } 30 | .icon-favorite:before { 31 | content: "\e901"; 32 | } 33 | .icon-keyboard_arrow_right:before { 34 | content: "\e902"; 35 | } 36 | .icon-remove_circle_outline:before { 37 | content: "\e903"; 38 | } 39 | .icon-shopping_cart:before { 40 | content: "\e904"; 41 | } 42 | .icon-thumb_down:before { 43 | content: "\e905"; 44 | } 45 | .icon-thumb_up:before { 46 | content: "\e906"; 47 | } 48 | .icon-add_circle:before { 49 | content: "\e907"; 50 | } 51 | .icon-arrow_lift:before { 52 | content: "\e908"; 53 | } 54 | .icon-check_circle:before { 55 | content: "\e909"; 56 | } 57 | .icon-arrow-up2:before { 58 | content: "\ea3a"; 59 | } 60 | .icon-arrow-down2:before { 61 | content: "\ea3e"; 62 | } 63 | -------------------------------------------------------------------------------- /src/assets/css/login.css: -------------------------------------------------------------------------------- 1 | /*nav*/ 2 | .header { 3 | width: 100%; 4 | background-color: white; 5 | font-family: "moderat",sans-serif; 6 | font-size: 16px; 7 | } 8 | .navbar { 9 | display: flex; 10 | justify-content: space-between; 11 | align-content: center; 12 | width: 100%; 13 | height: 70px; 14 | max-width: 1280px; 15 | margin: 0 auto; 16 | padding: 5px 20px 10px 20px; 17 | } 18 | .navbar-left-container { 19 | display: flex; 20 | justify-content: flex-start; 21 | align-items: center; 22 | margin-left: -20px; 23 | } 24 | .navbar-brand-logo { 25 | /*width: 120px;*/ 26 | } 27 | .header a, .footer a { 28 | color: #666; 29 | text-decoration: none; 30 | } 31 | a { 32 | -webkit-transition: color .3s ease-out; 33 | transition: color .3s ease-out; 34 | } 35 | .navbar-right-container { 36 | display: none; 37 | justify-content: flex-start; 38 | align-items: center; 39 | } 40 | .navbar-menu-container { 41 | display: flex; 42 | justify-content: flex-end; 43 | align-items: center; 44 | padding-top: 10px; 45 | } 46 | .navbar-link { 47 | padding-left: 15px; 48 | } 49 | .navbar-cart-container { 50 | position: relative; 51 | } 52 | .navbar-cart-count { 53 | justify-content: center; 54 | align-items: center; 55 | position: absolute; 56 | top: -9px; 57 | right: -11px; 58 | width: 20px; 59 | border-radius: 10px; 60 | color: white; 61 | background-color: #eb767d; 62 | font-size: 16px; 63 | font-weight: bold; 64 | text-align: center; 65 | } 66 | .navbar-cart-logo { 67 | width: 25px; 68 | height: 25px; 69 | transform: scaleX(-1); 70 | } 71 | /*login*/ 72 | .regi_form_input{ 73 | position: relative; 74 | height: 42px; 75 | line-height: 42px; 76 | background: none; 77 | margin-bottom: 15px; 78 | font-size: 14px; 79 | overflow: hidden; 80 | border:1px solid #ccc; 81 | padding-bottom: 0; 82 | } 83 | .regi_form_input .icon { 84 | display: inline-block; 85 | float: left; 86 | width: 25px; 87 | height: 29px; 88 | margin: 6px 0 0 14px; 89 | background-position: 4px 5px; 90 | background-image: url("/static/icon.png"); 91 | background-repeat: no-repeat; 92 | } 93 | .regi_form_input .IconPwd { 94 | background-position: -198px 3px; 95 | } 96 | .regi_form_input .regi_login_input{ 97 | position: absolute; 98 | left:45px; 99 | top:0; 100 | padding: 9px 0 10px; 101 | width: 270px; 102 | font-size: 14px; 103 | zoom: 1; 104 | border: none; 105 | color: #333; 106 | /*height: 23px;*/ 107 | line-height: 23px; 108 | background: 0 0!important; 109 | } 110 | .md-title{ 111 | position: absolute; 112 | top: 14px; 113 | line-height: 24px; 114 | padding: 8px 0; 115 | color: #333; 116 | font-size: 18px; 117 | font-weight: 400; 118 | font-style: normal; 119 | } 120 | .login-wrap{ 121 | margin-top:30px; 122 | } 123 | .md-content .btn-login{ 124 | display: block; 125 | height: 38px; 126 | line-height: 38px; 127 | border: 2px solid #009de6; 128 | background: #009de6; 129 | color: #fff; 130 | font-size: 18px; 131 | text-align: center; 132 | } 133 | .btn-login:hover { 134 | background: #61b1ef; 135 | border: 2px solid #61b1ef; 136 | } 137 | .error-wrap .error{ 138 | font-size: 12px; 139 | color: #d31723; 140 | visibility: hidden; 141 | display: block; 142 | padding: 0 0 7px 17px; 143 | line-height: 16px; 144 | height: 16px; 145 | text-align: left; 146 | background: url("/static/icon.png") 0 -100px no-repeat; 147 | } 148 | .md-content .error-wrap .error-show{ 149 | visibility: visible; 150 | height: auto; 151 | } 152 | -------------------------------------------------------------------------------- /src/assets/css/modal.css: -------------------------------------------------------------------------------- 1 | .md-modal { 2 | position: fixed; 3 | top: 50%; 4 | left: 50%; 5 | width: 535px; 6 | height: auto; 7 | -webkit-transform: translate(-50%,-50%); 8 | -ms-transform: translate(-50%,-50%); 9 | transform: translate(-50%,-50%); 10 | visibility: hidden; 11 | z-index: 201; 12 | } 13 | .md-modal-transition.md-show .md-modal-inner { 14 | -webkit-transform: translateY(0); 15 | -ms-transform: translateY(0); 16 | transform: translateY(0); 17 | opacity: 1; 18 | -webkit-transition: all .5s ease-out; 19 | transition: all .5s ease-out; 20 | } 21 | .md-modal-transition .md-modal-inner { 22 | background: #fff; 23 | -webkit-transform: translateY(20%); 24 | -ms-transform: translateY(20%); 25 | transform: translateY(20%); 26 | opacity: 0; 27 | -webkit-transition: all .3s ease-out; 28 | transition: all .3s ease-out; 29 | } 30 | .md-modal .md-modal-inner { 31 | padding: 60px 50px; 32 | } 33 | .md-modal .confirm-tips { 34 | min-height: 5.65em; 35 | } 36 | .md-modal .confirm-tips, .md-modal .alert-tips { 37 | font-size: 14px; 38 | font-weight: 200; 39 | text-align: center; 40 | } 41 | .md-modal .btn-wrap { 42 | margin-top: 20px; 43 | text-align: center; 44 | font-size: 0; 45 | } 46 | .md-modal .btn-wrap .btn { 47 | width: 45%; 48 | min-width: 80px; 49 | margin: 0 2.5%; 50 | } 51 | .md-modal .md-close { 52 | position: absolute; 53 | top: 7px; 54 | right: 7px; 55 | width: 34px; 56 | height: 34px; 57 | -webkit-transform: scale(0.5); 58 | -ms-transform: scale(0.5); 59 | transform: scale(0.5); 60 | text-indent: -8000px; 61 | } 62 | .md-modal .md-close:hover:before { 63 | -webkit-transform: rotate(-135deg); 64 | -ms-transform: rotate(-135deg); 65 | transform: rotate(-135deg); 66 | } 67 | .md-modal .md-close:hover:before, .md-modal .md-close:hover:after { 68 | -webkit-transition: -webkit-transform .3s ease-out; 69 | transition: -webkit-transform .3s ease-out; 70 | transition: transform .3s ease-out; 71 | transition: transform .3s ease-out,-webkit-transform .3s ease-out; 72 | } 73 | .md-modal .md-close:before { 74 | -webkit-transform: rotate(-45deg); 75 | -ms-transform: rotate(-45deg); 76 | transform: rotate(-45deg); 77 | } 78 | .md-modal .md-close:before, .md-modal .md-close:after { 79 | position: absolute; 80 | top: 16px; 81 | left: -4px; 82 | content: ""; 83 | width: 44px; 84 | height: 3px; 85 | background: #605f5f; 86 | -webkit-transition: -webkit-transform .5s ease-out; 87 | transition: -webkit-transform .5s ease-out; 88 | transition: transform .5s ease-out; 89 | transition: transform .5s ease-out,-webkit-transform .5s ease-out; 90 | } 91 | .md-modal .md-close:hover:after { 92 | -webkit-transform: rotate(-45deg); 93 | -ms-transform: rotate(-45deg); 94 | transform: rotate(-45deg); 95 | } 96 | .md-modal .md-close:after { 97 | -webkit-transform: rotate(45deg); 98 | -ms-transform: rotate(45deg); 99 | transform: rotate(45deg); 100 | } 101 | .md-show { 102 | visibility: visible; 103 | } 104 | 105 | .md-overlay { 106 | position: fixed; 107 | top: 0; 108 | left: 0; 109 | width: 100%; 110 | height: 100%; 111 | background: rgba(0,0,0,0.5); 112 | z-index: 200; 113 | } 114 | 115 | .btn { 116 | display: inline-block; 117 | height: 54px; 118 | line-height: 54px; 119 | padding: 0 1.2em; 120 | text-align: center; 121 | font-size: 14px; 122 | font-family: "moderat",sans-serif; 123 | -webkit-transition: all .3s ease-out; 124 | transition: all .3s ease-out; 125 | border: 1px solid #d1434a; 126 | color: #d1434a; 127 | text-transform: uppercase; 128 | letter-spacing: .25em; 129 | white-space: nowrap; 130 | } 131 | .btn--m { 132 | height: 45px; 133 | line-height: 45px; 134 | } 135 | .btn--s{ 136 | 137 | height:30px; 138 | line-height:30px; 139 | } 140 | input, select, button { 141 | vertical-align: middle; 142 | } 143 | 144 | .btn--m { 145 | height: 45px; 146 | line-height: 45px; 147 | } 148 | .btn--red { 149 | background-color: #d1434a; 150 | border-color: #d1434a; 151 | color: #fff; 152 | } 153 | .btn:hover, .btn[href]:hover { 154 | background-color: #d1434a; 155 | color: #fff; 156 | -webkit-transition: all .3s ease-out; 157 | transition: all .3s ease-out; 158 | } 159 | .btn--red:hover { 160 | background-color: #fff; 161 | color: #d1434a; 162 | } 163 | button { 164 | background: 0; 165 | border: 0; 166 | -webkit-box-sizing: border-box; 167 | box-sizing: border-box; 168 | color: inherit; 169 | cursor: pointer; 170 | font: inherit; 171 | line-height: inherit; 172 | overflow: visible; 173 | vertical-align: inherit; 174 | } 175 | .md-form-item{ 176 | margin:10px; 177 | } 178 | .md-form-item__label { 179 | text-align: right; 180 | vertical-align: middle; 181 | float: left; 182 | font-size: 14px; 183 | color: #48576a; 184 | line-height: 1; 185 | padding: 11px 12px 11px 0; 186 | box-sizing: border-box; 187 | } 188 | .md-form-item__content { 189 | line-height: 36px; 190 | position: relative; 191 | font-size: 14px; 192 | } 193 | .md-input__inner { 194 | -webkit-appearance: none; 195 | -moz-appearance: none; 196 | appearance: none; 197 | background-color: #fff; 198 | background-image: none; 199 | border-radius: 4px; 200 | border: 1px solid #333; 201 | box-sizing: border-box; 202 | color: #1f2d3d; 203 | display: block; 204 | font-size: inherit; 205 | height: 36px; 206 | line-height: 1; 207 | outline: 0; 208 | padding: 3px 10px; 209 | transition: border-color .2s cubic-bezier(.645,.045,.355,1); 210 | width: 100%; 211 | } 212 | .md-input__inner:focus{border-color:#20a0ff} -------------------------------------------------------------------------------- /src/assets/css/productDetails.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | /* reset */ 3 | body,p,h1,h2,h3,h4,h5,h6,p,dl,dd,ul,ol,pre,form,input,textarea,th,td,select{margin:0;padding:0;font-size:12px;font-family: "Microsoft YaHei";} 4 | em{font-style:normal} 5 | li{list-style:none} 6 | a{text-decoration:none; cursor:pointer;} 7 | img{border:none; vertical-align:top;} 8 | table{border-collapse:collapse;} 9 | textarea{ resize:none;overflow:auto;} 10 | /* end reset */ 11 | .wrap,.header,.nav,.gouTop{width:1366px;} 12 | .wrap{ } 13 | /* header start */ 14 | .header{height:30px; background:#f1f1f1;} 15 | .header li{float:left;} 16 | .header li a{color:#666666; font-size:12px; line-height:28px;} 17 | .header li a:hover{color:#C00;} 18 | .header li:nth-of-type(1){margin-left:80px;} 19 | .header li:nth-of-type(2){margin-left:742px;} 20 | .header li span{color:#dddddd; font-size:12px; margin:0 12px 0 12px;} 21 | .header li img{margin:6px 2px 0 2px;} 22 | .header .qGou{width:97px; height:163px; border:1px solid #ededed; position:absolute; left:1112px; top:30px; display:none; z-index:100;} 23 | .header .qGou img{width:97px; height:163px;} 24 | /* nav start*/ 25 | .nav{height:164px; background:#ffffff; border-bottom:2px solid black;} 26 | .search{width: 100%; } 27 | .search .logo{float: left; margin-top:15px; margin-left:80px;} 28 | .search .search_on{width: 638px;height: 60px;float: left;margin:45px 0 0 120px;} 29 | .search .search_on .se{float: left;width:100%;} 30 | .search .search_on .se .lf{width:454px;height:32px;border:2px solid #b61d1d;float:left;} 31 | .search .search_on .se .clik{width:77px;height:36px;float:left;border:none;background:#b61d1d;color:#fff} 32 | .search .search_on .se a{padding:5px;float:left;font-size: 10px;} 33 | .search .card{width: 139px;height: 34px;border: 2px solid #dfdfdf; background:url(../img/card.jpg) no-repeat 18px #f9f9f9;float: right;margin:45px 110px 0 0 ;} 34 | .search .card a{text-decoration:none;color: #949494;padding: 0px 38px;line-height: 38px; background: url(../img/icon.jpg) no-repeat 118px;position: relative;} 35 | .search .card a:hover{color:#F00;} 36 | .search .card a .num{width: 30px;height: 30px;background: #c81623;border-radius: 50%;position: absolute;left: 85px;top: -31px;color:#fff;text-align: center;line-height: 30px;} 37 | .search .cardDis{width:300px; height:69px; border:1px solid #ededed; box-shadow:5px 5px 5px #888888; z-index:100; position:absolute; right:92px; top:112px; background:#fff; line-height:50px; display:none;} 38 | .search .cardDis p{ margin:-55px 0 0 90px; color:#CCC;} 39 | 40 | .search ul{width:100%; height:20px; position:absolute; top:170px; left:870px;} 41 | .search li{float:left; margin-left:15px;} 42 | .search ul progress{border:1px solid #ededed; background:#0F0; border-radius:5px;} 43 | .search li .a1{color:#000; font-weight:bold;} 44 | .search li{color:#666;} 45 | .search li .sp1{margin-left:10px;} 46 | .search li a:hover{text-decoration:underline;} 47 | 48 | /* gouTop start*/ 49 | .gouTop{height:730px; position:relative;} 50 | .gouTop p{font-size:14px; margin:42px 0 0 76px; } 51 | .gouTop .left p,.gouTop .right p{color:#999999; font-size:12px; margin-left:50px;} 52 | .gouTop .left{width:450px; height:602px; margin:33px 0 0 76px; float:left;} 53 | .gouTop .left #top{width:450px; height:450px; border:1px solid #ededed; position:relative; overflow:hidden;} 54 | #mark{width:450px; height:450px; background:red; position:absolute; left:0; top:0;opacity:0; filter:alpha(opacity=0);} 55 | .gouTop .left #top img{width:450px; height:450px;} 56 | .gouTop .left #top span{width:180px; height:180px; background:yellow; opacity:0.5; filter:alpha(opacity=50); position:absolute; left:0; top:0; display:none;} 57 | .gouTop #disV{width:500px; height:500px; border:1px solid #ededed; z-index:100; position:absolute; left:560px; top:94px; display:none; overflow:hidden;} 58 | .gouTop #disV img{position:absolute; left:0; top:0; } 59 | 60 | .gouTop .left li{width:70px; height:75px; border:1px solid #ededed; float:left; margin:14px 0 0 10px;background:rgba(0,0,0,1);z-index:100;} 61 | .gouTop .left li.active{border:1px solid #960;} 62 | .gouTop .left li img{width:70px; height:75px;} 63 | .gouTop .left ul a{width:16px; height:76px; display:block; background:#f8f8f8; float:left; margin-top:14px; line-height:70px; text-align:center; font-weight:bold;} 64 | .gouTop .left ul #next{float:right;} 65 | .gouTop .left #bCod{height:30px; margin:95px 0 0 0;} 66 | .gouTop .left #bCod .a1{margin:0 50px 0 150px;} 67 | .gouTop .left #bCod a{color:#999999;} 68 | .gouTop .right{width:715px; height:602px; margin:33px 78px 0 0; float:right;} 69 | .gouTop .right .top h1{margin:15px 0 0 50px; font-size:20px;} 70 | .gouTop .right .top{height:156px; border-bottom:1px solid #ededed;} 71 | .gouTop .right .top .p1{color:#C00; margin:15px 0 0 50px;} 72 | .gouTop .right .top .p2{ margin-top:30px;} 73 | .gouTop .right .top span{color:#C00; font-size:30px; margin:45px 0 0 15px; font-weight:bold;} 74 | .gouTop .right .middle{height:98px; border-bottom:1px solid #ededed;} 75 | .gouTop .right .middle span{color:#333; margin-left:15px;} 76 | .gouTop .right .middle p{margin-top:26px;} 77 | .gouTop .bottom{position:relative;} 78 | .gouTop .bottom li{margin-left:50px; margin-top:32px;} 79 | .gouTop .bottom li span{color:#999999; } 80 | .gouTop .bottom .li1 a{width:36px; height:42px; border:1px solid #ededed; display:block; float:left; padding-left:50px;} 81 | .gouTop .bottom .li1 a:hover,.gouTop .bottom .li1 .active{height:41px; border:2px solid #633;} 82 | .gouTop .bottom .li1 a:nth-of-type(1){position:absolute; left:105px; top:-15px; background:url(../img/1s .jpg) no-repeat; line-height:34px;} 83 | .gouTop .bottom .li1 a:nth-of-type(2){position:absolute; left:211px; top:-15px; background:url(../img/2s.jpg) no-repeat;line-height:34px;} 84 | .gouTop .bottom .li2 a{width:46px; height:23px; border:1px solid #ededed; display:block; float:left; text-align:center; line-height:20px;} 85 | .gouTop .bottom .li2 a:hover,.gouTop .bottom .li2 .active{height:22px; border:2px solid #633;} 86 | .gouTop .bottom .li2 a:nth-of-type(1){position:absolute; left:105px; top:44px;} 87 | .gouTop .bottom .li2 a:nth-of-type(2){position:absolute; left:165px; top:44px; } 88 | .gouTop .bottom .li3 input{width:90px; height:23px; border:1px solid #ededed; margin-left:30px;} 89 | .gouTop .bottom .li4{margin-top:15px} 90 | .gouTop .bottom .li4 span{margin-right:30px;} 91 | .gouTop #btn{width:200px; height:50px; background:#863177; display:block; margin:30px 0 0 50px; font-size:20px; text-align:center;line-height:44px; color:#fff; font-weight:bold;} 92 | /* hotT*/ 93 | .hotT{width:100%; height:330px; margin-top:60px;} 94 | .hotT .pTop{font-size:14px; font-weight:bold; margin-left:78px;} 95 | .hotT ul{ margin:20px 0 0 78px;} 96 | .hotT ul li{width:202px; height:290px; border:1px solid #ededed; float:left; overflow:hidden;} 97 | .hotT ul li img{margin:15px 0 30px 20px; transition:1s;} 98 | .hotT ul li img:hover{/*-webkit-transform:rotate(360deg);*/-webkit-transform:scale(1.3);-moz-transform:scale(1.3);} 99 | .hotT ul li a{color:#CCC; margin-left:20px; text-align:center; } 100 | .hotT ul li .p{font-size:16px; font-weight:bold; margin:10px 0 0 10px;} 101 | /* sale list */ 102 | .saleList{width:100%; margin-top:25px; position:relative;} 103 | .saleList #ul{margin-left:76px; border-bottom:2px solid black; width:1023px; background:#f8f8f8; height:60px; position:relative;} 104 | .saleList #ul li{width:96px; height:60px; float:left; text-align:center; position:relative; } 105 | .saleList #ul li:hover,.saleList ul .activeL{background:#34383b; color:#fff; cursor: pointer; } 106 | .saleList #ul li a{font-size:14px; line-height:60px; color:#7c7c7c; cursor: pointer; width:96px; height:60px; display:block; position:absolute; top:0px; left:0px;} 107 | .saleList #ul li a:hover,.saleList ul li .activeA{color:#fff;} 108 | .saleList #ul .price{margin-right:12px; position:absolute; top:18px; right:12px;} 109 | .saleList #ul em{color:#999999; margin-right:25px;} 110 | .saleList #ul strong{font-size:20px; color:#666666;} 111 | .saleList .btn{width:205px; height:60px; background:#863177; display:block; font-size:20px; text-align:center;line-height:60px; color:#fff; font-weight:bold; position:absolute; right:64px; margin-top:-62px; border-bottom:2px solid black;} 112 | .saleList #saleTab{width:1229px; position:absolute; top:60px; left:76px; display:none;} 113 | .saleList #saleTab table{width:796px; height:105px; margin:23px 0 0 23px;} 114 | .saleList #saleTab #td{width:348px;} 115 | .saleList #saleTab td{height:25px; width:224px;} 116 | .saleList #saleTab td p{color:#666666; font-size:12px;} 117 | .saleList #saleTab td a{color:#00F;} 118 | .saleList .saleDiv1{margin:20px 0 0 20px;} 119 | .saleList .saleDiv1 img{margin:80px 0 0 200px;} 120 | .saleList .saleDiv2 img{margin-top:30px;} 121 | .saleList .saleDiv3 h1{margin:20px 0 20px 0; font-size:20px;} 122 | .saleList .saleDiv3 p{font-size:12px; margin:20px 0 10px 0; color:#666;} 123 | .saleList .saleDiv3 img{margin:20px 0 0 0;} 124 | .saleList .saleDiv3 ul{border-bottom:1px solid #ededed; margin-top:0px;} 125 | .saleList .saleDiv3 li{height:75px; border-top:1px solid #ededed; list-style:outside;margin-left:20px; margin-top:0px;} 126 | .saleList .saleDiv3 li{margin:20px 0 20px 0;} 127 | .saleList .saleDiv3 li #p1{font-size:14px; color:black;} 128 | .saleList .saleDiv4 img{margin-top:40px;} 129 | .saleList .saleDiv5 #div5Ul{ margin:40px 0 0 0px;} 130 | .saleList .saleDiv5 #div5Ul li{width:226px; height:321px; border:1px solid #ededed; float:left; overflow:hidden; margin:0 16px 10px 0;} 131 | .saleList .saleDiv5 #div5Ul li:hover{border:1px solid red;} 132 | .saleList .saleDiv5 #div5Ul li img{margin:15px 0 25px 10px; width:208px; height:202px; transition:1s;} 133 | .saleList .saleDiv5 #div5Ul li img:hover{/*-webkit-transform:rotate(360deg);*/-webkit-transform:scale(1.3);-moz-transform:scale(1.3);} 134 | .saleList .saleDiv5 #div5Ul li a{color:#CCC; margin-left:20px; text-align:center; } 135 | .saleList .saleDiv5 #div5Ul li .p{font-size:16px; font-weight:bold; margin:15px 0 0 15px; color:#F00;}*/*/ 136 | 137 | 138 | /* footer */ 139 | .wrap footer{width:100%; height:400px; border:none;margin-top:5750px;} 140 | .wrap footer img{margin-top:-5px;} -------------------------------------------------------------------------------- /src/assets/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/1.png -------------------------------------------------------------------------------- /src/assets/img/1b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/1b.jpg -------------------------------------------------------------------------------- /src/assets/img/1s .jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/1s .jpg -------------------------------------------------------------------------------- /src/assets/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/2.png -------------------------------------------------------------------------------- /src/assets/img/2b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/2b.jpg -------------------------------------------------------------------------------- /src/assets/img/2s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/2s.jpg -------------------------------------------------------------------------------- /src/assets/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/3.png -------------------------------------------------------------------------------- /src/assets/img/3b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/3b.jpg -------------------------------------------------------------------------------- /src/assets/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/4.png -------------------------------------------------------------------------------- /src/assets/img/4b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/4b.jpg -------------------------------------------------------------------------------- /src/assets/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/5.png -------------------------------------------------------------------------------- /src/assets/img/5b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/5b.jpg -------------------------------------------------------------------------------- /src/assets/img/car2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/car2.png -------------------------------------------------------------------------------- /src/assets/img/card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/card.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/banner.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/buttom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/buttom.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/card.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/f.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/foot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/foot.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/icon.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/icon_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/icon_1.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/icon_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/icon_2.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/icon_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/icon_3.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/img_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/img_1.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/img_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/img_2.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/img_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/img_3.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/img_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/img_4.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/img_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/img_5.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/img_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/img_6.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/jia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/jia.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/jian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/jian.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/lf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/lf.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/logo.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/mai.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/mai.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/mail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/mail.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/mail_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/mail_1.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/rg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/rg.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/shop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/shop.jpg -------------------------------------------------------------------------------- /src/assets/img/cart/top_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/cart/top_img.jpg -------------------------------------------------------------------------------- /src/assets/img/ewm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/ewm.gif -------------------------------------------------------------------------------- /src/assets/img/footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/footer.png -------------------------------------------------------------------------------- /src/assets/img/gouLC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/gouLC.png -------------------------------------------------------------------------------- /src/assets/img/hotT/56eb6f95Nea3fac74.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56eb6f95Nea3fac74.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56ef639eN7e5f746a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56ef639eN7e5f746a.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56f21315N2f8034ba.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56f21315N2f8034ba.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56f4e102N94e7cc4f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56f4e102N94e7cc4f.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56f4e71eN3c1b31ee.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56f4e71eN3c1b31ee.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56f4e9b6Nb2f77ab9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56f4e9b6Nb2f77ab9.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56fe1640Nd97fbaf8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56fe1640Nd97fbaf8.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/56fe3cbfN977fcdc6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/56fe3cbfN977fcdc6.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b517b0Na190fb7f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b517b0Na190fb7f.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b51823N413179c9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b51823N413179c9.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b519d0Nd5262347.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b519d0Nd5262347.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b51e53Nff9658bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b51e53Nff9658bc.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b51f31N6cc75507.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b51f31N6cc75507.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b51fd6N96984f3e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b51fd6N96984f3e.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b5207fN34515ded.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b5207fN34515ded.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b520ffN5160f3d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b520ffN5160f3d3.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b5215cN34f6667b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b5215cN34f6667b.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57b521b0Ndc532f15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57b521b0Ndc532f15.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57bac14fNf77f5757.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57bac14fNf77f5757.jpg -------------------------------------------------------------------------------- /src/assets/img/hotT/57bd3bedNd9e45548.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/hotT/57bd3bedNd9e45548.jpg -------------------------------------------------------------------------------- /src/assets/img/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/icon.jpg -------------------------------------------------------------------------------- /src/assets/img/icon3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/icon3.gif -------------------------------------------------------------------------------- /src/assets/img/icon3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/icon3.jpg -------------------------------------------------------------------------------- /src/assets/img/icon4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/icon4.gif -------------------------------------------------------------------------------- /src/assets/img/icon5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/icon5.gif -------------------------------------------------------------------------------- /src/assets/img/jianjie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/jianjie.gif -------------------------------------------------------------------------------- /src/assets/img/jianjie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/jianjie.jpg -------------------------------------------------------------------------------- /src/assets/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/logo.jpg -------------------------------------------------------------------------------- /src/assets/img/phone.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/phone.gif -------------------------------------------------------------------------------- /src/assets/img/pjia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/pjia.png -------------------------------------------------------------------------------- /src/assets/img/shouhou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/shouhou.png -------------------------------------------------------------------------------- /src/assets/img/title.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/img/title.gif -------------------------------------------------------------------------------- /src/assets/js/productDetails.js: -------------------------------------------------------------------------------- 1 | window.onload = function(){ 2 | //$(".search .card").mouseover(function(){alert(1);}); 3 | 4 | /* left 图片切换*/ 5 | var arrUrl = [ 'img/1.png', 'img/2.png', 'img/3.png', 'img/4.png','img/5.png']; 6 | var disImgUrl = [ 'img/1b.jpg', 'img/2b.jpg', 'img/3b.jpg', 'img/4b.jpg','img/5b.jpg']; 7 | var num = 0; 8 | var oDiv = document.getElementById('left'); 9 | var oPic = document.getElementById('top'); 10 | var oImg = oPic.getElementsByTagName('img')[0]; 11 | var oA = oDiv.getElementsByTagName('a'); 12 | var oUl =oDiv.getElementsByTagName('ul')[0]; 13 | var aLi = oDiv.getElementsByTagName('li'); 14 | var oSpan = oPic.getElementsByTagName('span')[0]; 15 | var o_DisV = document.getElementById('disV'); 16 | var dis_Img = document.getElementById('disImg'); 17 | 18 | for(var i=1;i<=arrUrl.length;i++) 19 | { 20 | oUl.innerHTML+='
  • '; 21 | //style="background:url(img/'+i+'.png); 22 | } 23 | //oldLi = aLi[num]; 24 | //初始化 25 | function tabPic(){ 26 | oImg.src = arrUrl[num]; 27 | dis_Img.src = disImgUrl[num] 28 | //aLi[num].className = 'active'; 29 | for( var i=0; ioPic.offsetWidth - oSpan.offsetWidth){ 89 | L = oPic.offsetWidth - oSpan.offsetWidth; 90 | } 91 | 92 | if(T<0){ 93 | T = 0; 94 | } 95 | else if(T>oPic.offsetHeight - oSpan.offsetHeight){ 96 | T = oPic.offsetHeight - oSpan.offsetHeight; 97 | } 98 | 99 | oSpan.style.left = L + 'px'; 100 | oSpan.style.top = T + 'px'; 101 | 102 | var scaleX = L/(oPic.offsetWidth - oSpan.offsetWidth); 103 | var scaleY = T/(oPic.offsetHeight - oSpan.offsetHeight); 104 | 105 | dis_Img.style.left = - scaleX * (dis_Img.offsetWidth - o_DisV.offsetWidth) + 'px'; 106 | dis_Img.style.top = - scaleY * (dis_Img.offsetHeight - o_DisV.offsetHeight) + 'px'; 107 | 108 | }; 109 | 110 | 111 | /* saleTab tab切换*/ 112 | /*$(".saleList li").click(function(){ 113 | //alert($(this).index()); 114 | $(".saleList #saleTab").eq($(this).index()).css({'display':'block'}); 115 | $(".saleList #saleTab").siblings('#saleTab').css({'display':'none'}); 116 | });*/ 117 | // $('.saleList').find('li').click(function(){//alert(1); 118 | // // alert($(this).index()); 119 | // $('.saleList').find('li').removeClass(); 120 | // $(".saleList #saleTab").css({'display':'none'}); 121 | // $(this).addClass('activeL'); 122 | // $(".saleList #saleTab").eq($(this).index()).css({'display':'block'}); 123 | // if($(this).index()==0) 124 | // { 125 | // //alert(1); 126 | // $('footer').css({'margin-top':'5750px'}); 127 | // } 128 | // else if($(this).index()==1) 129 | // { 130 | // $('footer').css({'margin-top':'612px'}); 131 | // } 132 | // else if($(this).index()==2) 133 | // { 134 | // $('footer').css({'margin-top':'1082px'}); 135 | // } 136 | // else if($(this).index()==3) 137 | // { 138 | // $('footer').css({'margin-top':'634px'}); 139 | // } 140 | // else if($(this).index()==4) 141 | // { 142 | // $('footer').css({'margin-top':'1494px'}); 143 | // } 144 | // }); 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | }; -------------------------------------------------------------------------------- /src/assets/loading-spinning-bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/style/common.scss: -------------------------------------------------------------------------------- 1 | .w { 2 | width: 1220px; 3 | margin: 0 auto; 4 | } 5 | 6 | .fl { 7 | float: left; 8 | } 9 | 10 | .fr { 11 | float: right; 12 | } 13 | 14 | .pr { 15 | position: relative; 16 | } 17 | 18 | .pa { 19 | position: absolute; 20 | } 21 | 22 | .active { 23 | color: #c81623; 24 | } 25 | 26 | .clearfix:after { 27 | content: ''; 28 | display: block; 29 | clear: both; 30 | line-height: 0; 31 | visibility: hidden; 32 | } 33 | 34 | .clearfix { 35 | *zoom: 1 36 | } 37 | 38 | .ellipsis { 39 | overflow: hidden; 40 | text-overflow: ellipsis; 41 | white-space: nowrap; 42 | } 43 | 44 | // 删除按钮 45 | .del-btn { 46 | display: block; 47 | cursor: pointer; 48 | width: 20px; 49 | height: 20px; 50 | background: url(/static/images/account-icon@2x.32d87deb02b3d1c3cc5bcff0c26314ac.png) -50px -60px no-repeat; 51 | background-size: 240px 107px; 52 | text-indent: -9999em; 53 | &:hover { 54 | background-position: -75px -60px; 55 | } 56 | } 57 | 58 | .layout-container { 59 | min-height: 400px; 60 | background: #E6E6E6; 61 | } 62 | 63 | .gray-box { 64 | overflow: hidden; 65 | background: #fff; 66 | border-radius: 8px; 67 | border: 1px solid #dcdcdc; 68 | border-color: rgba(0, 0, 0, .14); 69 | box-shadow: 0 3px 8px -6px rgba(0, 0, 0, .1); 70 | } 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/assets/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "reset"; 2 | @import "common"; 3 | -------------------------------------------------------------------------------- /src/assets/style/mixin.scss: -------------------------------------------------------------------------------- 1 | %block-center { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | } 6 | 7 | @mixin wh($w,$h:$w) { 8 | width: $w; 9 | height: $h; 10 | } 11 | -------------------------------------------------------------------------------- /src/assets/style/reset.scss: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | font-family: PingFang SC, Helvetica Neue, Helvetica, Arial, Hiragino Sans GB, Microsoft Yahei, \\5FAE\8F6F\96C5\9ED1, STHeiti, \\534E\6587\7EC6\9ED1, sans-serif; 9 | color: #666; 10 | font-size: 14px; 11 | } 12 | 13 | a { 14 | font-style: normal; 15 | text-decoration: none; 16 | color: #5079d9; 17 | cursor: pointer; 18 | transition: all .15s ease-out; 19 | &:hover { 20 | color: #6b95ea; 21 | } 22 | } 23 | 24 | li { 25 | list-style-type: none; 26 | } 27 | 28 | input, 29 | img, 30 | button { 31 | border: none; 32 | outline: none; 33 | } 34 | 35 | h1, h2, h3, h4, h5, h6 { 36 | font-size: 100%; 37 | font-weight: 400; 38 | } 39 | 40 | i, em { 41 | font-style: normal; 42 | } 43 | 44 | input[type=number], textarea { 45 | -moz-appearance: textfield; 46 | } 47 | 48 | input[type=number]::-webkit-inner-spin-button, 49 | input[type=number]::-webkit-outer-spin-button, 50 | input[type="submit"], 51 | input[type="search"], 52 | input[type="reset"] { 53 | -webkit-appearance: none; 54 | } 55 | ::-webkit-input-placeholder { /* WebKit browsers */ 56 | color: #BEBEBE; 57 | } 58 | :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ 59 | color: #BEBEBE; 60 | } 61 | ::-moz-placeholder { /* Mozilla Firefox 19+ */ 62 | color: #BEBEBE; 63 | } 64 | :-ms-input-placeholder { /* Internet Explorer 10+ */ 65 | color: #BEBEBE; 66 | } -------------------------------------------------------------------------------- /src/assets/style/theme.scss: -------------------------------------------------------------------------------- 1 | // 主色 2 | $main-col: #5079d9; 3 | // 头部 4 | $head-bgc: #1a1a1a; 5 | // 字体颜色 6 | $cc: #ccc; 7 | $c6: #666; 8 | $c9: #999; 9 | $c3: #333; 10 | $cf: #fff 11 | -------------------------------------------------------------------------------- /src/components/Counter.vue: -------------------------------------------------------------------------------- 1 | 8 | 10 | 27 | -------------------------------------------------------------------------------- /src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | 34 | 35 | 51 | -------------------------------------------------------------------------------- /src/components/YButton.vue: -------------------------------------------------------------------------------- 1 | 9 | 32 | 104 | -------------------------------------------------------------------------------- /src/components/buynum.vue: -------------------------------------------------------------------------------- 1 | 24 | 104 | 208 | -------------------------------------------------------------------------------- /src/components/footer.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 38 | 40 | -------------------------------------------------------------------------------- /src/components/insertAdr.vue: -------------------------------------------------------------------------------- 1 | 63 | 67 | 90 | -------------------------------------------------------------------------------- /src/components/modal.vue: -------------------------------------------------------------------------------- 1 | 21 | 25 | 40 | -------------------------------------------------------------------------------- /src/components/navbread.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /src/components/paySuc.vue: -------------------------------------------------------------------------------- 1 | 18 | 25 | 40 | -------------------------------------------------------------------------------- /src/components/register.vue: -------------------------------------------------------------------------------- 1 | 57 | 152 | 221 | -------------------------------------------------------------------------------- /src/components/shelf.vue: -------------------------------------------------------------------------------- 1 | 15 | 22 | 59 | -------------------------------------------------------------------------------- /src/components/slideShow.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 84 | 85 | 171 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import store from './store/' 7 | import vueResource from 'vue-resource' 8 | import vueLazyLoad from 'vue-lazyload' 9 | import infiniteScroll from 'vue-infinite-scroll' 10 | import Base64 from 'js-base64' 11 | Vue.use(vueResource) 12 | Vue.use(vueLazyLoad,{ 13 | loading:"./static/loading-svg/loading-bars.svg" // 设置图片懒加载 14 | }) 15 | Vue.use(infiniteScroll) 16 | Vue.use(Base64) 17 | Vue.config.productionTip = false 18 | /* eslint-disable no-new */ 19 | new Vue({ 20 | el: '#app', 21 | router, 22 | store, 23 | template: '', 24 | components: { App } 25 | }) 26 | -------------------------------------------------------------------------------- /src/page/OrderSuccess.vue: -------------------------------------------------------------------------------- 1 | 40 | 65 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import GoodsList from '../page/GoodsList' 4 | import Cart from '../page/Cart' 5 | import Address from '../page/Address' 6 | import AddressList from '../page/AddressList' 7 | import OrderConfirm from '../page/OrderConfirm' 8 | import OrderSuccess from '../page/OrderSuccess' 9 | import OrderList from '../page/OrderList.vue' 10 | import GoodsDetails from '../page/GoodsDetails' 11 | Vue.use(Router) 12 | 13 | export default new Router({ 14 | routes: [ 15 | { 16 | path: '/', 17 | name: 'GoodsList', 18 | component: GoodsList 19 | }, 20 | { 21 | path: '/goodsdetails', 22 | name: 'GoodsDetails', 23 | component: GoodsDetails 24 | }, 25 | { 26 | path: '/cart', 27 | name: 'Cart', 28 | component: Cart 29 | }, 30 | { 31 | path: '/address', 32 | name: 'Address', 33 | component: Address 34 | }, 35 | { 36 | path: '/addresslist', 37 | name: 'AddressList', 38 | component: AddressList 39 | }, 40 | { 41 | path: '/orderconfirm', 42 | name: 'OrderConfirm', 43 | component: OrderConfirm 44 | }, 45 | { 46 | path: '/orderinfo', 47 | name: 'OrderSuccess', 48 | component: OrderSuccess 49 | }, 50 | { 51 | path: '/orderlist', 52 | name: 'OrderList', 53 | component: OrderList 54 | } 55 | ] 56 | }) 57 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | Vue.use(Vuex) 4 | const state = { 5 | myName:'', 6 | cartCount:0, 7 | goodsList:[], 8 | cartList:[], 9 | haveLen:false, 10 | totalPrice:0, 11 | checkGoodsLen:true 12 | } 13 | 14 | export default new Vuex.Store({ 15 | state, 16 | mutations: { 17 | // 保存用户名 18 | updateUser(state,myName) { 19 | state.myName = myName; 20 | }, 21 | // 更新商品商品列表 22 | updateGoodslist(state,goodsList) { 23 | state.goodsList = goodsList; 24 | }, 25 | // 初始化商品列表 26 | initGoodslist(state,goodsList) { 27 | state.goodsList = goodsList; 28 | }, 29 | // 判断goodsList是否为空 30 | checkGoodLen(state,ifLen) { 31 | state.checkGoodsLen = ifLen; 32 | }, 33 | // 更新购物车商品数量 34 | updateCartCount(state,cartNum) { 35 | var cart = state.cartList; 36 | state.cartCount = cart.length; 37 | }, 38 | // 初始化购物车商品数量 39 | initCartCount(state,cartNum) { 40 | state.cartCount = cartNum; 41 | }, 42 | //更新购物车列表 43 | updateCartList(state,{productId, productPrice,checked,productName, productImg, productNum = 1}) { 44 | let cart = state.cartList; // 购物车 45 | let falg = true; 46 | let goods = { 47 | productId, 48 | productPrice, 49 | productName, 50 | productImg 51 | }; 52 | if (cart.length) { // 有内容 53 | cart.forEach(item => { 54 | if (item.productId === productId) { 55 | if (item.productNum >= 0) { 56 | falg = false; 57 | item.productNum += productNum; 58 | } 59 | } 60 | }) 61 | } 62 | if (!cart.length || falg) { 63 | goods.productNum = productNum; 64 | goods.checked = '1'; 65 | cart.push(goods); 66 | } 67 | state.cartList = cart; 68 | }, 69 | // 删除购物车商品 70 | delCartList(state,{productId}) { 71 | let cart = state.cartList; 72 | cart.forEach((item, i) => { 73 | if (item.productId === productId) { 74 | cart.splice(i, 1); 75 | } 76 | }); 77 | state.cartList = cart; 78 | }, 79 | // 初始化购物车 80 | initCartList(state,cartList) { 81 | state.cartList = cartList; 82 | }, 83 | updateHaveProduct(state, flag) { 84 | state.haveLen = flag; 85 | }, 86 | // 判断购物车是为空 87 | checkCartLen(state,flag) { 88 | let len = state.cartCount; // 购物车 89 | if(len<=0) { 90 | state.haveLen = false; 91 | } else{ 92 | state.haveLen = true; 93 | } 94 | } 95 | } 96 | }) 97 | -------------------------------------------------------------------------------- /src/备份/components/Counter.vue: -------------------------------------------------------------------------------- 1 | 8 | 10 | 27 | -------------------------------------------------------------------------------- /src/备份/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | 34 | 35 | 51 | -------------------------------------------------------------------------------- /src/备份/components/YButton.vue: -------------------------------------------------------------------------------- 1 | 9 | 32 | 104 | -------------------------------------------------------------------------------- /src/备份/components/buynum.vue: -------------------------------------------------------------------------------- 1 | 24 | 104 | 208 | -------------------------------------------------------------------------------- /src/备份/components/footer.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 38 | 40 | -------------------------------------------------------------------------------- /src/备份/components/insertAdr.vue: -------------------------------------------------------------------------------- 1 | 63 | 67 | 90 | -------------------------------------------------------------------------------- /src/备份/components/modal.vue: -------------------------------------------------------------------------------- 1 | 21 | 25 | 40 | -------------------------------------------------------------------------------- /src/备份/components/navbread.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /src/备份/components/paySuc.vue: -------------------------------------------------------------------------------- 1 | 18 | 25 | 40 | -------------------------------------------------------------------------------- /src/备份/components/register.vue: -------------------------------------------------------------------------------- 1 | 57 | 152 | 210 | -------------------------------------------------------------------------------- /src/备份/components/shelf.vue: -------------------------------------------------------------------------------- 1 | 15 | 22 | 59 | -------------------------------------------------------------------------------- /src/备份/components/slideShow.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 84 | 85 | 171 | -------------------------------------------------------------------------------- /src/备份/page/OrderSuccess.vue: -------------------------------------------------------------------------------- 1 | 40 | 65 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/.gitkeep -------------------------------------------------------------------------------- /static/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/1.jpg -------------------------------------------------------------------------------- /static/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/10.jpg -------------------------------------------------------------------------------- /static/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/11.jpg -------------------------------------------------------------------------------- /static/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/12.jpg -------------------------------------------------------------------------------- /static/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/13.jpg -------------------------------------------------------------------------------- /static/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/14.jpg -------------------------------------------------------------------------------- /static/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/15.jpg -------------------------------------------------------------------------------- /static/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/16.jpg -------------------------------------------------------------------------------- /static/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/2.jpg -------------------------------------------------------------------------------- /static/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/3.jpg -------------------------------------------------------------------------------- /static/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/4.jpg -------------------------------------------------------------------------------- /static/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/404.png -------------------------------------------------------------------------------- /static/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/5.jpg -------------------------------------------------------------------------------- /static/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/6.jpg -------------------------------------------------------------------------------- /static/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/7.jpg -------------------------------------------------------------------------------- /static/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/8.jpg -------------------------------------------------------------------------------- /static/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/9.jpg -------------------------------------------------------------------------------- /static/details-img/iphoneX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/details-img/iphoneX.jpg -------------------------------------------------------------------------------- /static/details-img/xiaomi-matebook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/details-img/xiaomi-matebook.jpg -------------------------------------------------------------------------------- /static/details-img/xiaomi-tv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/details-img/xiaomi-tv.jpg -------------------------------------------------------------------------------- /static/details-img/xiaomi6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/details-img/xiaomi6.jpg -------------------------------------------------------------------------------- /static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/icon.png -------------------------------------------------------------------------------- /static/images/alipay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/alipay@2x.png -------------------------------------------------------------------------------- /static/images/bg_9b9dcb65ff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/bg_9b9dcb65ff.png -------------------------------------------------------------------------------- /static/images/bg_9b9dcb65ff@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/bg_9b9dcb65ff@2x.png -------------------------------------------------------------------------------- /static/images/cart-empty-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/cart-empty-new.png -------------------------------------------------------------------------------- /static/images/cart-empty_@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/cart-empty_@2x.png -------------------------------------------------------------------------------- /static/images/cart-updown_8303731e15@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/cart-updown_8303731e15@2x.jpg -------------------------------------------------------------------------------- /static/images/checkbox-new_631a56a4f6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/checkbox-new_631a56a4f6.png -------------------------------------------------------------------------------- /static/images/con-bg_04f25dbf8e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/con-bg_04f25dbf8e.jpg -------------------------------------------------------------------------------- /static/images/delete-btn-icon_a35bf2437e@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/delete-btn-icon_a35bf2437e@2x.jpg -------------------------------------------------------------------------------- /static/images/dialog-gray-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/dialog-gray-bg.png -------------------------------------------------------------------------------- /static/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/error.png -------------------------------------------------------------------------------- /static/images/global-logo-red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/global-logo-red@2x.png -------------------------------------------------------------------------------- /static/images/global-logo-red@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/global-logo-red@2x.psd -------------------------------------------------------------------------------- /static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/icon.png -------------------------------------------------------------------------------- /static/images/load.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/load.gif -------------------------------------------------------------------------------- /static/images/no-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/no-data.png -------------------------------------------------------------------------------- /static/images/no-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/no-search.png -------------------------------------------------------------------------------- /static/images/other-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/other-login.png -------------------------------------------------------------------------------- /static/images/payali.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/payali.png -------------------------------------------------------------------------------- /static/images/qqpay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/qqpay.png -------------------------------------------------------------------------------- /static/images/qr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/qr.png -------------------------------------------------------------------------------- /static/images/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/red.png -------------------------------------------------------------------------------- /static/images/smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/smile.png -------------------------------------------------------------------------------- /static/images/support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/support.png -------------------------------------------------------------------------------- /static/images/user-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/user-avatar.png -------------------------------------------------------------------------------- /static/images/wechat-explain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/wechat-explain.png -------------------------------------------------------------------------------- /static/images/weixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/weixin.png -------------------------------------------------------------------------------- /static/images/weixinpay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/images/weixinpay@2x.png -------------------------------------------------------------------------------- /static/imooc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/imooc.jpg -------------------------------------------------------------------------------- /static/iphoneX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/iphoneX.jpg -------------------------------------------------------------------------------- /static/loading-svg/loading-balls.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/loading-svg/loading-bars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /static/loading-svg/loading-bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/loading-svg/loading-cubes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/loading-svg/loading-cylon-red.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/loading-svg/loading-cylon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/loading-svg/loading-spin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /static/loading-svg/loading-spinning-bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /static/loading-svg/loading-spokes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /static/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/loading.gif -------------------------------------------------------------------------------- /static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/logo.png -------------------------------------------------------------------------------- /static/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/logo1.png -------------------------------------------------------------------------------- /static/mi6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/mi6.jpg -------------------------------------------------------------------------------- /static/note.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/note.jpg -------------------------------------------------------------------------------- /static/ok-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/ok-2.png -------------------------------------------------------------------------------- /static/photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/photo.jpg -------------------------------------------------------------------------------- /static/pingheng.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/pingheng.jpg -------------------------------------------------------------------------------- /static/slide-img/14766931740570.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/slide-img/14766931740570.jpg -------------------------------------------------------------------------------- /static/slide-img/15115169565977.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/slide-img/15115169565977.jpg -------------------------------------------------------------------------------- /static/slide-img/15144381201181.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/slide-img/15144381201181.jpg -------------------------------------------------------------------------------- /static/slide-img/15144443267556.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/slide-img/15144443267556.jpg -------------------------------------------------------------------------------- /static/slide-img/15144482787248.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/slide-img/15144482787248.jpg -------------------------------------------------------------------------------- /static/zipai.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wzz5304/vueMall/1947483b272c6b6c19746a6344c52681a8c2c472/static/zipai.jpg --------------------------------------------------------------------------------