├── .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 | 
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 |
2 |
3 |
4 |
5 |
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 |
--------------------------------------------------------------------------------
/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 |
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 |
2 |
3 |
4 |
5 |
{{num}}
6 |
7 |
8 |
10 |
27 |
--------------------------------------------------------------------------------
/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
13 |
Ecosystem
14 |
20 |
21 |
22 |
23 |
33 |
34 |
35 |
51 |
--------------------------------------------------------------------------------
/src/components/YButton.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
104 |
--------------------------------------------------------------------------------
/src/components/buynum.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
-
8 |
9 |
10 |
15 |
18 |
19 |
+
21 |
22 |
23 |
24 |
104 |
208 |
--------------------------------------------------------------------------------
/src/components/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
31 |
32 |
33 |
34 |
38 |
40 |
--------------------------------------------------------------------------------
/src/components/insertAdr.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
*为必填项
9 |
10 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
67 |
90 |
--------------------------------------------------------------------------------
/src/components/modal.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
25 |
40 |
--------------------------------------------------------------------------------
/src/components/navbread.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/paySuc.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
25 |
40 |
--------------------------------------------------------------------------------
/src/components/register.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {{errtips}}
15 | 注册成功,3秒后跳转至登录!
16 |
17 |
35 |
36 |
46 |
47 |
48 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
152 |
221 |
--------------------------------------------------------------------------------
/src/components/shelf.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
22 |
59 |
--------------------------------------------------------------------------------
/src/components/slideShow.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
{{ slides[nowIndex].title }}
14 |
15 | - <
16 | -
19 |
20 |
21 | - >
22 |
23 |
24 |
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 |
2 |
3 |
4 |
5 |
6 |
check out
7 |
8 |
9 |
10 |
11 | - 确认地址
12 | - 查看订单
13 | - 创建支付
14 | - 订单成功
15 |
16 |
17 |
18 |
19 |
20 |
21 |
恭喜您~
你的订单正在快速处理中,请耐心等待!
22 |
23 | 订单号:{{orderId}}
24 | 订单总价:¥{{totalPrice}}
25 |
26 |
27 |
28 | 全部订单
29 |
30 |
31 | 继续购物
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
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 |
2 |
3 |
4 |
5 |
{{num}}
6 |
7 |
8 |
10 |
27 |
--------------------------------------------------------------------------------
/src/备份/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
13 |
Ecosystem
14 |
20 |
21 |
22 |
23 |
33 |
34 |
35 |
51 |
--------------------------------------------------------------------------------
/src/备份/components/YButton.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
104 |
--------------------------------------------------------------------------------
/src/备份/components/buynum.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
-
8 |
9 |
10 |
15 |
18 |
19 |
+
21 |
22 |
23 |
24 |
104 |
208 |
--------------------------------------------------------------------------------
/src/备份/components/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
31 |
32 |
33 |
34 |
38 |
40 |
--------------------------------------------------------------------------------
/src/备份/components/insertAdr.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
*为必填项
9 |
10 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
67 |
90 |
--------------------------------------------------------------------------------
/src/备份/components/modal.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
25 |
40 |
--------------------------------------------------------------------------------
/src/备份/components/navbread.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/备份/components/paySuc.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
25 |
40 |
--------------------------------------------------------------------------------
/src/备份/components/register.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {{errtips}}
15 | 注册成功,3秒后跳转至登录!
16 |
17 |
35 |
36 |
46 |
47 |
48 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
152 |
210 |
--------------------------------------------------------------------------------
/src/备份/components/shelf.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
22 |
59 |
--------------------------------------------------------------------------------
/src/备份/components/slideShow.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
{{ slides[nowIndex].title }}
14 |
15 | - <
16 | -
19 |
20 |
21 | - >
22 |
23 |
24 |
25 |
26 |
84 |
85 |
171 |
--------------------------------------------------------------------------------
/src/备份/page/OrderSuccess.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
check out
7 |
8 |
9 |
10 |
11 | - 确认地址
12 | - 查看订单
13 | - 创建支付
14 | - 订单成功
15 |
16 |
17 |
18 |
19 |
20 |
21 |
恭喜您~
你的订单正在快速处理中,请耐心等待!
22 |
23 | 订单号:{{orderId}}
24 | 订单总价:¥{{totalPrice}}
25 |
26 |
27 |
28 | 全部订单
29 |
30 |
31 | 继续购物
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
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 |
15 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-bars.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-bubbles.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-cubes.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-cylon-red.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-cylon.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-spin.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-spinning-bubbles.svg:
--------------------------------------------------------------------------------
1 |
30 |
--------------------------------------------------------------------------------
/static/loading-svg/loading-spokes.svg:
--------------------------------------------------------------------------------
1 |
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
--------------------------------------------------------------------------------