├── .browserslistrc
├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .prettierrc.json
├── README.md
├── babel.config.js
├── img
├── bgc
│ └── bgc.jpg
├── good
│ ├── pic-1.jpg
│ ├── pic-2.jpg
│ ├── pic-3.jpg
│ ├── pic-4.jpg
│ ├── pic-5.jpg
│ ├── pic-6.jpg
│ └── pic-7.jpg
└── swipe
│ ├── swipe-1.jpg
│ ├── swipe-2.jpg
│ ├── swipe-3.jpg
│ ├── swipe-4.jpg
│ ├── swipe1-1.jpg
│ ├── swipe1-2.jpg
│ └── swipe1-3.jpg
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── bars.svg
├── favicon.ico
├── index.html
└── method-draw-image.svg
├── screenshots
├── address.png
├── cart.png
├── good.png
├── index.png
├── login.png
├── order.png
├── orderlist.png
├── qrcode.png
├── reg.png
└── user.png
├── server
├── app.js
├── bin
│ └── www
├── db
│ └── connect.js
├── package-lock.json
├── package.json
├── public
│ └── stylesheets
│ │ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
│ ├── error.jade
│ ├── index.jade
│ └── layout.jade
├── sql
└── vantstore.sql
├── src
├── App.vue
├── api
│ └── api.js
├── components
│ ├── backgroundImg
│ │ └── backgroundImg.vue
│ ├── github
│ │ └── github.vue
│ ├── goodItem
│ │ └── goodItem.vue
│ ├── scroll
│ │ ├── scrollX.vue
│ │ └── scrollY.vue
│ └── tabItem
│ │ └── tabItem.vue
├── images
│ ├── bgc
│ │ └── bgc.jpg
│ ├── detail
│ │ ├── detail-1.jpg
│ │ ├── detail-2.jpg
│ │ ├── detail-3.jpg
│ │ ├── detail-4.jpg
│ │ ├── detail-5.jpg
│ │ └── detail-6.jpg
│ ├── good
│ │ ├── pic-1.jpg
│ │ ├── pic-2.jpg
│ │ ├── pic-3.jpg
│ │ ├── pic-4.jpg
│ │ ├── pic-5.jpg
│ │ ├── pic-6.jpg
│ │ └── pic-7.jpg
│ └── swipe
│ │ ├── swipe-1.jpg
│ │ ├── swipe-2.jpg
│ │ ├── swipe-3.jpg
│ │ ├── swipe-4.jpg
│ │ ├── swipe1-1.jpg
│ │ ├── swipe1-2.jpg
│ │ └── swipe1-3.jpg
├── main.js
├── router
│ └── index.js
├── store
│ ├── getters.js
│ ├── index.js
│ ├── mutations-types.js
│ ├── mutations.js
│ └── state.js
├── util
│ ├── http.js
│ └── util.js
└── views
│ ├── AddressList
│ └── AddressList.vue
│ ├── Cart
│ └── Cart.vue
│ ├── EditAddress
│ └── EditAddress.vue
│ ├── Good
│ └── Good.vue
│ ├── Home
│ └── Home.vue
│ ├── Login
│ └── Login.vue
│ ├── NotFound
│ └── NotFound.vue
│ ├── Order
│ └── Order.vue
│ ├── OrderList
│ └── OrderList.vue
│ ├── Reg
│ └── Reg.vue
│ ├── Tab
│ └── Tab.vue
│ └── User
│ └── User.vue
└── vue.config.js
/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | extends: ["plugin:vue/essential", "@vue/prettier"],
7 | rules: {
8 | "no-console": process.env.NODE_ENV === "production" ? "error" : "off",
9 | "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
10 | "no-undef": 0,
11 | "no-unused-vars": 0
12 | },
13 | parserOptions: {
14 | parser: "babel-eslint"
15 | }
16 | };
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "printWidth": 120
4 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vant-store
2 | 一个商城Demo, 前端使用vant有赞UI,vue实现, 后端使用mysql,express实现。
3 |
4 | # 实现的功能
5 |
6 | 1. 登录/注册
7 | 2. 商品列表
8 | 3. 商品详情
9 | 4. 购物车
10 | 5. 收货地址
11 | 6. 订单
12 |
13 | # 项目预览
14 | 查看Demo [点这里](http://182.254.192.62/vue-vant-store)
15 |
16 |
17 | 在手机上效果更好,扫一扫体验
18 |
19 | 
20 |
21 | # 前端
22 |
23 | ## 项目依赖
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | ## 项目运行
53 |
54 | * 将 `img`文件夹复制到 `http://127.0.0.1:80` 服务器下即可查看图片
55 | * 数据库数据及文件在 `sql` 目录下
56 |
57 | ``` bash
58 | # 安装依赖
59 | npm install
60 |
61 | # 开发预览
62 | npm run serve
63 |
64 | # 打包发布
65 | npm run build
66 | ```
67 |
68 | # 后端
69 |
70 | ## 项目依赖
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | ## 项目运行
85 |
86 | ``` bash
87 | # 进入目录
88 | cd server
89 |
90 | # 安装依赖
91 | npm install
92 |
93 | # 启动服务器
94 | npm start
95 |
96 | ```
97 | # 截图
98 |
99 |
100 | ### 首页
101 | 
102 | ### 商品详情
103 | 
104 | ### 购物车
105 | 
106 |
107 | ### 订单
108 | 
109 | 
110 | ### 地址
111 | 
112 | ### 登录/注册
113 | 
114 | 
115 | ### 用户
116 | 
117 |
118 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/app"]
3 | };
4 |
--------------------------------------------------------------------------------
/img/bgc/bgc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/bgc/bgc.jpg
--------------------------------------------------------------------------------
/img/good/pic-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-1.jpg
--------------------------------------------------------------------------------
/img/good/pic-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-2.jpg
--------------------------------------------------------------------------------
/img/good/pic-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-3.jpg
--------------------------------------------------------------------------------
/img/good/pic-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-4.jpg
--------------------------------------------------------------------------------
/img/good/pic-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-5.jpg
--------------------------------------------------------------------------------
/img/good/pic-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-6.jpg
--------------------------------------------------------------------------------
/img/good/pic-7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/good/pic-7.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe-1.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe-2.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe-3.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe-4.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe1-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe1-1.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe1-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe1-2.jpg
--------------------------------------------------------------------------------
/img/swipe/swipe1-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/img/swipe/swipe1-3.jpg
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vant-store",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "axios": "^0.18.0",
12 | "better-scroll": "^1.12.6",
13 | "crypto-js": "^3.1.9-1",
14 | "stylus": "^0.54.5",
15 | "stylus-loader": "^3.0.2",
16 | "vant": "^1.2.1",
17 | "vue": "^2.5.17",
18 | "vue-router": "^3.0.1",
19 | "vuex": "^3.0.1"
20 | },
21 | "devDependencies": {
22 | "@vue/cli-plugin-babel": "^3.0.1",
23 | "@vue/cli-plugin-eslint": "^3.0.1",
24 | "@vue/cli-service": "^3.0.1",
25 | "@vue/eslint-config-prettier": "^3.0.1",
26 | "prettier": "^1.14.2",
27 | "vue-template-compiler": "^2.5.17"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/public/bars.svg:
--------------------------------------------------------------------------------
1 |
53 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | vant-store
10 |
18 |
19 |
20 |
21 |
24 |
25 |
26 |

27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/public/method-draw-image.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/screenshots/address.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/address.png
--------------------------------------------------------------------------------
/screenshots/cart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/cart.png
--------------------------------------------------------------------------------
/screenshots/good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/good.png
--------------------------------------------------------------------------------
/screenshots/index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/index.png
--------------------------------------------------------------------------------
/screenshots/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/login.png
--------------------------------------------------------------------------------
/screenshots/order.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/order.png
--------------------------------------------------------------------------------
/screenshots/orderlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/orderlist.png
--------------------------------------------------------------------------------
/screenshots/qrcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/qrcode.png
--------------------------------------------------------------------------------
/screenshots/reg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/reg.png
--------------------------------------------------------------------------------
/screenshots/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/screenshots/user.png
--------------------------------------------------------------------------------
/server/app.js:
--------------------------------------------------------------------------------
1 | var createError = require('http-errors');
2 | var express = require('express');
3 | var path = require('path');
4 | var cookieParser = require('cookie-parser');
5 | var logger = require('morgan');
6 |
7 | var indexRouter = require('./routes/index');
8 | var usersRouter = require('./routes/users');
9 |
10 | var app = express();
11 |
12 | // view engine setup
13 | app.set('views', path.join(__dirname, 'views'));
14 | app.set('view engine', 'jade');
15 |
16 | app.use(logger('dev'));
17 | app.use(express.json());
18 | app.use(
19 | express.urlencoded({
20 | extended: false
21 | })
22 | );
23 | app.use(cookieParser());
24 | app.use(express.static(path.join(__dirname, 'public')));
25 | app.all('*', function(req, res, next) {
26 | res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:8080');
27 | res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type');
28 | res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS');
29 | res.header('Content-Type', 'application/json;charset=utf-8');
30 | res.header('Access-Control-Allow-Credentials', true);
31 | if (req.method == 'OPTIONS') {
32 | res.send(200);
33 | } else {
34 | next();
35 | }
36 | });
37 | app.use(function(req, res, next) {
38 | if (req.cookies.username) {
39 | next();
40 | } else {
41 | var url = req.originalUrl;
42 | if (
43 | url === '/login' ||
44 | url === '/reg' ||
45 | url === '/hotsale' ||
46 | url === '/salegroup' ||
47 | url === '/discover' ||
48 | url === '/hotsale'
49 | ) {
50 | next();
51 | } else {
52 | res.status(401).json({
53 | value: '401'
54 | });
55 | }
56 | }
57 | });
58 | app.use('/', indexRouter);
59 | app.use('/users', usersRouter);
60 |
61 | // catch 404 and forward to error handler
62 | app.use(function(req, res, next) {
63 | next(createError(404));
64 | });
65 |
66 | // error handler
67 | app.use(function(err, req, res, next) {
68 | // set locals, only providing error in development
69 | console.log(err.message)
70 | res.locals.message = err.message;
71 | res.locals.error = req.app.get('env') === 'development' ? err : {};
72 |
73 | // render the error page
74 | res.status(err.status || 500);
75 | res.render('error');
76 | });
77 |
78 | module.exports = app;
79 |
--------------------------------------------------------------------------------
/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 || '3000');
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/db/connect.js:
--------------------------------------------------------------------------------
1 | var mysql = require('mysql');
2 | var connection = mysql.createConnection({
3 | host: 'localhost',
4 | user: 'root',
5 | password: '',
6 | database: 'vantstore'
7 | });
8 |
9 | connection.connect();
10 |
11 | module.exports = connection;
12 |
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.5",
9 | "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz",
10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
11 | "requires": {
12 | "mime-types": "~2.1.18",
13 | "negotiator": "0.6.1"
14 | }
15 | },
16 | "acorn": {
17 | "version": "2.7.0",
18 | "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-2.7.0.tgz",
19 | "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
20 | },
21 | "acorn-globals": {
22 | "version": "1.0.9",
23 | "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-1.0.9.tgz",
24 | "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
25 | "requires": {
26 | "acorn": "^2.1.0"
27 | }
28 | },
29 | "align-text": {
30 | "version": "0.1.4",
31 | "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz",
32 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
33 | "requires": {
34 | "kind-of": "^3.0.2",
35 | "longest": "^1.0.1",
36 | "repeat-string": "^1.5.2"
37 | }
38 | },
39 | "amdefine": {
40 | "version": "1.0.1",
41 | "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
42 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
43 | },
44 | "array-flatten": {
45 | "version": "1.1.1",
46 | "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
47 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
48 | },
49 | "asap": {
50 | "version": "1.0.0",
51 | "resolved": "http://registry.npm.taobao.org/asap/download/asap-1.0.0.tgz",
52 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
53 | },
54 | "basic-auth": {
55 | "version": "2.0.0",
56 | "resolved": "http://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.0.tgz",
57 | "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
58 | "requires": {
59 | "safe-buffer": "5.1.1"
60 | }
61 | },
62 | "bignumber.js": {
63 | "version": "4.1.0",
64 | "resolved": "http://registry.npm.taobao.org/bignumber.js/download/bignumber.js-4.1.0.tgz",
65 | "integrity": "sha1-228UBnwUC9RmJIFaeRbJLZtsJLE="
66 | },
67 | "body-parser": {
68 | "version": "1.18.2",
69 | "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz",
70 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
71 | "requires": {
72 | "bytes": "3.0.0",
73 | "content-type": "~1.0.4",
74 | "debug": "2.6.9",
75 | "depd": "~1.1.1",
76 | "http-errors": "~1.6.2",
77 | "iconv-lite": "0.4.19",
78 | "on-finished": "~2.3.0",
79 | "qs": "6.5.1",
80 | "raw-body": "2.3.2",
81 | "type-is": "~1.6.15"
82 | }
83 | },
84 | "bytes": {
85 | "version": "3.0.0",
86 | "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
87 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
88 | },
89 | "camelcase": {
90 | "version": "1.2.1",
91 | "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz",
92 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
93 | },
94 | "center-align": {
95 | "version": "0.1.3",
96 | "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
97 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
98 | "requires": {
99 | "align-text": "^0.1.3",
100 | "lazy-cache": "^1.0.3"
101 | }
102 | },
103 | "character-parser": {
104 | "version": "1.2.1",
105 | "resolved": "http://registry.npm.taobao.org/character-parser/download/character-parser-1.2.1.tgz",
106 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
107 | },
108 | "clean-css": {
109 | "version": "3.4.28",
110 | "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz",
111 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
112 | "requires": {
113 | "commander": "2.8.x",
114 | "source-map": "0.4.x"
115 | },
116 | "dependencies": {
117 | "commander": {
118 | "version": "2.8.1",
119 | "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz",
120 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
121 | "requires": {
122 | "graceful-readlink": ">= 1.0.0"
123 | }
124 | }
125 | }
126 | },
127 | "cliui": {
128 | "version": "2.1.0",
129 | "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz",
130 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
131 | "requires": {
132 | "center-align": "^0.1.1",
133 | "right-align": "^0.1.1",
134 | "wordwrap": "0.0.2"
135 | },
136 | "dependencies": {
137 | "wordwrap": {
138 | "version": "0.0.2",
139 | "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz",
140 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
141 | }
142 | }
143 | },
144 | "commander": {
145 | "version": "2.6.0",
146 | "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.6.0.tgz",
147 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
148 | },
149 | "constantinople": {
150 | "version": "3.0.2",
151 | "resolved": "http://registry.npm.taobao.org/constantinople/download/constantinople-3.0.2.tgz",
152 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
153 | "requires": {
154 | "acorn": "^2.1.0"
155 | }
156 | },
157 | "content-disposition": {
158 | "version": "0.5.2",
159 | "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz",
160 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
161 | },
162 | "content-type": {
163 | "version": "1.0.4",
164 | "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
165 | "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
166 | },
167 | "cookie": {
168 | "version": "0.3.1",
169 | "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz",
170 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
171 | },
172 | "cookie-parser": {
173 | "version": "1.4.3",
174 | "resolved": "http://registry.npm.taobao.org/cookie-parser/download/cookie-parser-1.4.3.tgz",
175 | "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=",
176 | "requires": {
177 | "cookie": "0.3.1",
178 | "cookie-signature": "1.0.6"
179 | }
180 | },
181 | "cookie-signature": {
182 | "version": "1.0.6",
183 | "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
184 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
185 | },
186 | "core-util-is": {
187 | "version": "1.0.2",
188 | "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
189 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
190 | },
191 | "css": {
192 | "version": "1.0.8",
193 | "resolved": "http://registry.npm.taobao.org/css/download/css-1.0.8.tgz",
194 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
195 | "requires": {
196 | "css-parse": "1.0.4",
197 | "css-stringify": "1.0.5"
198 | }
199 | },
200 | "css-parse": {
201 | "version": "1.0.4",
202 | "resolved": "http://registry.npm.taobao.org/css-parse/download/css-parse-1.0.4.tgz",
203 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
204 | },
205 | "css-stringify": {
206 | "version": "1.0.5",
207 | "resolved": "http://registry.npm.taobao.org/css-stringify/download/css-stringify-1.0.5.tgz",
208 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
209 | },
210 | "debug": {
211 | "version": "2.6.9",
212 | "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
213 | "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
214 | "requires": {
215 | "ms": "2.0.0"
216 | }
217 | },
218 | "decamelize": {
219 | "version": "1.2.0",
220 | "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
221 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
222 | },
223 | "depd": {
224 | "version": "1.1.2",
225 | "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
226 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
227 | },
228 | "destroy": {
229 | "version": "1.0.4",
230 | "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
231 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
232 | },
233 | "ee-first": {
234 | "version": "1.1.1",
235 | "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
236 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
237 | },
238 | "encodeurl": {
239 | "version": "1.0.2",
240 | "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
241 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
242 | },
243 | "escape-html": {
244 | "version": "1.0.3",
245 | "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
246 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
247 | },
248 | "etag": {
249 | "version": "1.8.1",
250 | "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
251 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
252 | },
253 | "express": {
254 | "version": "4.16.3",
255 | "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.3.tgz",
256 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
257 | "requires": {
258 | "accepts": "~1.3.5",
259 | "array-flatten": "1.1.1",
260 | "body-parser": "1.18.2",
261 | "content-disposition": "0.5.2",
262 | "content-type": "~1.0.4",
263 | "cookie": "0.3.1",
264 | "cookie-signature": "1.0.6",
265 | "debug": "2.6.9",
266 | "depd": "~1.1.2",
267 | "encodeurl": "~1.0.2",
268 | "escape-html": "~1.0.3",
269 | "etag": "~1.8.1",
270 | "finalhandler": "1.1.1",
271 | "fresh": "0.5.2",
272 | "merge-descriptors": "1.0.1",
273 | "methods": "~1.1.2",
274 | "on-finished": "~2.3.0",
275 | "parseurl": "~1.3.2",
276 | "path-to-regexp": "0.1.7",
277 | "proxy-addr": "~2.0.3",
278 | "qs": "6.5.1",
279 | "range-parser": "~1.2.0",
280 | "safe-buffer": "5.1.1",
281 | "send": "0.16.2",
282 | "serve-static": "1.13.2",
283 | "setprototypeof": "1.1.0",
284 | "statuses": "~1.4.0",
285 | "type-is": "~1.6.16",
286 | "utils-merge": "1.0.1",
287 | "vary": "~1.1.2"
288 | }
289 | },
290 | "finalhandler": {
291 | "version": "1.1.1",
292 | "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz",
293 | "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
294 | "requires": {
295 | "debug": "2.6.9",
296 | "encodeurl": "~1.0.2",
297 | "escape-html": "~1.0.3",
298 | "on-finished": "~2.3.0",
299 | "parseurl": "~1.3.2",
300 | "statuses": "~1.4.0",
301 | "unpipe": "~1.0.0"
302 | }
303 | },
304 | "forwarded": {
305 | "version": "0.1.2",
306 | "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz",
307 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
308 | },
309 | "fresh": {
310 | "version": "0.5.2",
311 | "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
312 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
313 | },
314 | "graceful-readlink": {
315 | "version": "1.0.1",
316 | "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz",
317 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
318 | },
319 | "http-errors": {
320 | "version": "1.6.3",
321 | "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz",
322 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
323 | "requires": {
324 | "depd": "~1.1.2",
325 | "inherits": "2.0.3",
326 | "setprototypeof": "1.1.0",
327 | "statuses": ">= 1.4.0 < 2"
328 | }
329 | },
330 | "iconv-lite": {
331 | "version": "0.4.19",
332 | "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz",
333 | "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs="
334 | },
335 | "inherits": {
336 | "version": "2.0.3",
337 | "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
338 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
339 | },
340 | "ipaddr.js": {
341 | "version": "1.8.0",
342 | "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.8.0.tgz",
343 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
344 | },
345 | "is-buffer": {
346 | "version": "1.1.6",
347 | "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
348 | "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
349 | },
350 | "is-promise": {
351 | "version": "2.1.0",
352 | "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz",
353 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
354 | },
355 | "isarray": {
356 | "version": "1.0.0",
357 | "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
358 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
359 | },
360 | "jade": {
361 | "version": "1.11.0",
362 | "resolved": "http://registry.npm.taobao.org/jade/download/jade-1.11.0.tgz",
363 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
364 | "requires": {
365 | "character-parser": "1.2.1",
366 | "clean-css": "^3.1.9",
367 | "commander": "~2.6.0",
368 | "constantinople": "~3.0.1",
369 | "jstransformer": "0.0.2",
370 | "mkdirp": "~0.5.0",
371 | "transformers": "2.1.0",
372 | "uglify-js": "^2.4.19",
373 | "void-elements": "~2.0.1",
374 | "with": "~4.0.0"
375 | }
376 | },
377 | "jstransformer": {
378 | "version": "0.0.2",
379 | "resolved": "http://registry.npm.taobao.org/jstransformer/download/jstransformer-0.0.2.tgz",
380 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
381 | "requires": {
382 | "is-promise": "^2.0.0",
383 | "promise": "^6.0.1"
384 | }
385 | },
386 | "kind-of": {
387 | "version": "3.2.2",
388 | "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
389 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
390 | "requires": {
391 | "is-buffer": "^1.1.5"
392 | }
393 | },
394 | "lazy-cache": {
395 | "version": "1.0.4",
396 | "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
397 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
398 | },
399 | "longest": {
400 | "version": "1.0.1",
401 | "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz",
402 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
403 | },
404 | "media-typer": {
405 | "version": "0.3.0",
406 | "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
407 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
408 | },
409 | "merge-descriptors": {
410 | "version": "1.0.1",
411 | "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
412 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
413 | },
414 | "methods": {
415 | "version": "1.1.2",
416 | "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
417 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
418 | },
419 | "mime": {
420 | "version": "1.4.1",
421 | "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz",
422 | "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY="
423 | },
424 | "mime-db": {
425 | "version": "1.36.0",
426 | "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.36.0.tgz",
427 | "integrity": "sha1-UCBHjbPH/pOq17vMTc+GnEM2M5c="
428 | },
429 | "mime-types": {
430 | "version": "2.1.20",
431 | "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.20.tgz",
432 | "integrity": "sha1-kwy3GdVx6QNzhSD4RwkRVIyizBk=",
433 | "requires": {
434 | "mime-db": "~1.36.0"
435 | }
436 | },
437 | "minimist": {
438 | "version": "0.0.8",
439 | "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz",
440 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
441 | },
442 | "mkdirp": {
443 | "version": "0.5.1",
444 | "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz",
445 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
446 | "requires": {
447 | "minimist": "0.0.8"
448 | }
449 | },
450 | "morgan": {
451 | "version": "1.9.0",
452 | "resolved": "http://registry.npm.taobao.org/morgan/download/morgan-1.9.0.tgz",
453 | "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
454 | "requires": {
455 | "basic-auth": "~2.0.0",
456 | "debug": "2.6.9",
457 | "depd": "~1.1.1",
458 | "on-finished": "~2.3.0",
459 | "on-headers": "~1.0.1"
460 | }
461 | },
462 | "ms": {
463 | "version": "2.0.0",
464 | "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
465 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
466 | },
467 | "mysql": {
468 | "version": "2.16.0",
469 | "resolved": "http://registry.npm.taobao.org/mysql/download/mysql-2.16.0.tgz",
470 | "integrity": "sha1-sjsiq13kT8LV0yvU9a9mU/xF4ro=",
471 | "requires": {
472 | "bignumber.js": "4.1.0",
473 | "readable-stream": "2.3.6",
474 | "safe-buffer": "5.1.2",
475 | "sqlstring": "2.3.1"
476 | },
477 | "dependencies": {
478 | "safe-buffer": {
479 | "version": "5.1.2",
480 | "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
481 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
482 | }
483 | }
484 | },
485 | "negotiator": {
486 | "version": "0.6.1",
487 | "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz",
488 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
489 | },
490 | "on-finished": {
491 | "version": "2.3.0",
492 | "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
493 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
494 | "requires": {
495 | "ee-first": "1.1.1"
496 | }
497 | },
498 | "on-headers": {
499 | "version": "1.0.1",
500 | "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz",
501 | "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
502 | },
503 | "optimist": {
504 | "version": "0.3.7",
505 | "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.3.7.tgz",
506 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
507 | "requires": {
508 | "wordwrap": "~0.0.2"
509 | }
510 | },
511 | "parseurl": {
512 | "version": "1.3.2",
513 | "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz",
514 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
515 | },
516 | "path-to-regexp": {
517 | "version": "0.1.7",
518 | "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
519 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
520 | },
521 | "process-nextick-args": {
522 | "version": "2.0.0",
523 | "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz",
524 | "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
525 | },
526 | "promise": {
527 | "version": "6.1.0",
528 | "resolved": "http://registry.npm.taobao.org/promise/download/promise-6.1.0.tgz",
529 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
530 | "requires": {
531 | "asap": "~1.0.0"
532 | }
533 | },
534 | "proxy-addr": {
535 | "version": "2.0.4",
536 | "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.4.tgz",
537 | "integrity": "sha1-7PxzO/Iv+Mb0B/onUye5q2fki5M=",
538 | "requires": {
539 | "forwarded": "~0.1.2",
540 | "ipaddr.js": "1.8.0"
541 | }
542 | },
543 | "qs": {
544 | "version": "6.5.1",
545 | "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz",
546 | "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg="
547 | },
548 | "range-parser": {
549 | "version": "1.2.0",
550 | "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz",
551 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
552 | },
553 | "raw-body": {
554 | "version": "2.3.2",
555 | "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz",
556 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
557 | "requires": {
558 | "bytes": "3.0.0",
559 | "http-errors": "1.6.2",
560 | "iconv-lite": "0.4.19",
561 | "unpipe": "1.0.0"
562 | },
563 | "dependencies": {
564 | "depd": {
565 | "version": "1.1.1",
566 | "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz",
567 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
568 | },
569 | "http-errors": {
570 | "version": "1.6.2",
571 | "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz",
572 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
573 | "requires": {
574 | "depd": "1.1.1",
575 | "inherits": "2.0.3",
576 | "setprototypeof": "1.0.3",
577 | "statuses": ">= 1.3.1 < 2"
578 | }
579 | },
580 | "setprototypeof": {
581 | "version": "1.0.3",
582 | "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz",
583 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
584 | }
585 | }
586 | },
587 | "readable-stream": {
588 | "version": "2.3.6",
589 | "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz",
590 | "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=",
591 | "requires": {
592 | "core-util-is": "~1.0.0",
593 | "inherits": "~2.0.3",
594 | "isarray": "~1.0.0",
595 | "process-nextick-args": "~2.0.0",
596 | "safe-buffer": "~5.1.1",
597 | "string_decoder": "~1.1.1",
598 | "util-deprecate": "~1.0.1"
599 | }
600 | },
601 | "repeat-string": {
602 | "version": "1.6.1",
603 | "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
604 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
605 | },
606 | "right-align": {
607 | "version": "0.1.3",
608 | "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
609 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
610 | "requires": {
611 | "align-text": "^0.1.1"
612 | }
613 | },
614 | "safe-buffer": {
615 | "version": "5.1.1",
616 | "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz",
617 | "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
618 | },
619 | "send": {
620 | "version": "0.16.2",
621 | "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz",
622 | "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
623 | "requires": {
624 | "debug": "2.6.9",
625 | "depd": "~1.1.2",
626 | "destroy": "~1.0.4",
627 | "encodeurl": "~1.0.2",
628 | "escape-html": "~1.0.3",
629 | "etag": "~1.8.1",
630 | "fresh": "0.5.2",
631 | "http-errors": "~1.6.2",
632 | "mime": "1.4.1",
633 | "ms": "2.0.0",
634 | "on-finished": "~2.3.0",
635 | "range-parser": "~1.2.0",
636 | "statuses": "~1.4.0"
637 | }
638 | },
639 | "serve-static": {
640 | "version": "1.13.2",
641 | "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz",
642 | "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
643 | "requires": {
644 | "encodeurl": "~1.0.2",
645 | "escape-html": "~1.0.3",
646 | "parseurl": "~1.3.2",
647 | "send": "0.16.2"
648 | }
649 | },
650 | "setprototypeof": {
651 | "version": "1.1.0",
652 | "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
653 | "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY="
654 | },
655 | "source-map": {
656 | "version": "0.4.4",
657 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz",
658 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
659 | "requires": {
660 | "amdefine": ">=0.0.4"
661 | }
662 | },
663 | "sqlstring": {
664 | "version": "2.3.1",
665 | "resolved": "http://registry.npm.taobao.org/sqlstring/download/sqlstring-2.3.1.tgz",
666 | "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
667 | },
668 | "statuses": {
669 | "version": "1.4.0",
670 | "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz",
671 | "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic="
672 | },
673 | "string_decoder": {
674 | "version": "1.1.1",
675 | "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
676 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
677 | "requires": {
678 | "safe-buffer": "~5.1.0"
679 | }
680 | },
681 | "transformers": {
682 | "version": "2.1.0",
683 | "resolved": "http://registry.npm.taobao.org/transformers/download/transformers-2.1.0.tgz",
684 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
685 | "requires": {
686 | "css": "~1.0.8",
687 | "promise": "~2.0",
688 | "uglify-js": "~2.2.5"
689 | },
690 | "dependencies": {
691 | "is-promise": {
692 | "version": "1.0.1",
693 | "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-1.0.1.tgz",
694 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
695 | },
696 | "promise": {
697 | "version": "2.0.0",
698 | "resolved": "http://registry.npm.taobao.org/promise/download/promise-2.0.0.tgz",
699 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
700 | "requires": {
701 | "is-promise": "~1"
702 | }
703 | },
704 | "source-map": {
705 | "version": "0.1.43",
706 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz",
707 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
708 | "requires": {
709 | "amdefine": ">=0.0.4"
710 | }
711 | },
712 | "uglify-js": {
713 | "version": "2.2.5",
714 | "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.2.5.tgz",
715 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
716 | "requires": {
717 | "optimist": "~0.3.5",
718 | "source-map": "~0.1.7"
719 | }
720 | }
721 | }
722 | },
723 | "type-is": {
724 | "version": "1.6.16",
725 | "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz",
726 | "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=",
727 | "requires": {
728 | "media-typer": "0.3.0",
729 | "mime-types": "~2.1.18"
730 | }
731 | },
732 | "uglify-js": {
733 | "version": "2.8.29",
734 | "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz",
735 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
736 | "requires": {
737 | "source-map": "~0.5.1",
738 | "uglify-to-browserify": "~1.0.0",
739 | "yargs": "~3.10.0"
740 | },
741 | "dependencies": {
742 | "source-map": {
743 | "version": "0.5.7",
744 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
745 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
746 | }
747 | }
748 | },
749 | "uglify-to-browserify": {
750 | "version": "1.0.2",
751 | "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
752 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
753 | "optional": true
754 | },
755 | "unpipe": {
756 | "version": "1.0.0",
757 | "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
758 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
759 | },
760 | "util-deprecate": {
761 | "version": "1.0.2",
762 | "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
763 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
764 | },
765 | "utils-merge": {
766 | "version": "1.0.1",
767 | "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
768 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
769 | },
770 | "vary": {
771 | "version": "1.1.2",
772 | "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
773 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
774 | },
775 | "void-elements": {
776 | "version": "2.0.1",
777 | "resolved": "http://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz",
778 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
779 | },
780 | "window-size": {
781 | "version": "0.1.0",
782 | "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz",
783 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
784 | },
785 | "with": {
786 | "version": "4.0.3",
787 | "resolved": "http://registry.npm.taobao.org/with/download/with-4.0.3.tgz",
788 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
789 | "requires": {
790 | "acorn": "^1.0.1",
791 | "acorn-globals": "^1.0.3"
792 | },
793 | "dependencies": {
794 | "acorn": {
795 | "version": "1.2.2",
796 | "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-1.2.2.tgz",
797 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
798 | }
799 | }
800 | },
801 | "wordwrap": {
802 | "version": "0.0.3",
803 | "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz",
804 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
805 | },
806 | "yargs": {
807 | "version": "3.10.0",
808 | "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz",
809 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
810 | "requires": {
811 | "camelcase": "^1.0.2",
812 | "cliui": "^2.1.0",
813 | "decamelize": "^1.0.0",
814 | "window-size": "0.1.0"
815 | }
816 | }
817 | }
818 | }
819 |
--------------------------------------------------------------------------------
/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 | "cookie-parser": "~1.4.3",
10 | "debug": "~2.6.9",
11 | "express": "~4.16.0",
12 | "http-errors": "~1.6.2",
13 | "jade": "~1.11.0",
14 | "morgan": "~1.9.0",
15 | "mysql": "^2.16.0"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/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 connection = require('../db/connect');
4 |
5 | //登陆
6 | router.post('/login', function(req, res, next) {
7 | var userName = req.body.userName;
8 | var password = req.body.password;
9 | var sql = 'SELECT * FROM user WHERE Username=?';
10 | var sqlParams = [userName];
11 | connection.query(sql, sqlParams, function(err, result) {
12 | if (err) {
13 | res.json({
14 | status: 500,
15 | msg: err,
16 | data: ''
17 | });
18 | return;
19 | }
20 | if (result.length === 0) {
21 | res.json({
22 | status: 0,
23 | msg: '用户名不存在',
24 | data: ''
25 | });
26 | return;
27 | }
28 | if (password === result[0].Password) {
29 | res.cookie('username', result[0].Username, {
30 | path: '/',
31 | maxAge: 1000 * 60 * 60 * 365
32 | });
33 | res.json({
34 | status: 200,
35 | msg: 'success',
36 | data: ''
37 | });
38 | } else {
39 | res.json({
40 | status: 0,
41 | msg: '密码错误',
42 | data: ''
43 | });
44 | }
45 | });
46 | });
47 |
48 | //注册
49 | router.post('/reg', function(req, res, next) {
50 | var userName = req.body.userName;
51 | var password = req.body.password;
52 | var sql = 'SELECT * FROM user WHERE Username=?';
53 | var sqlParams = [userName];
54 | connection.query(sql, sqlParams, function(err, result) {
55 | if (err) {
56 | res.json({
57 | status: 500,
58 | msg: err,
59 | data: ''
60 | });
61 | return;
62 | }
63 | if (result.length !== 0) {
64 | res.json({
65 | status: 0,
66 | msg: '用户已存在!',
67 | data: ''
68 | });
69 | return;
70 | }
71 | sql = 'INSERT INTO user(Username,Password) VALUES(?,?)';
72 | sqlParams = [userName, password];
73 | connection.query(sql, sqlParams, function(err, result) {
74 | if (err) {
75 | res.json({
76 | status: 500,
77 | msg: err,
78 | data: ''
79 | });
80 | return;
81 | }
82 | res.json({
83 | status: 200,
84 | msg: 'success',
85 | data: ''
86 | });
87 | });
88 | });
89 | });
90 | // 热销商品
91 | router.post('/hotsale', function(req, res, next) {
92 | var sql = `SELECT * FROM good WHERE find_in_set('1',GoodItem)`;
93 | connection.query(sql, function(err, result) {
94 | if (err) {
95 | res.json({
96 | status: 500,
97 | msg: err,
98 | data: ''
99 | });
100 | return;
101 | }
102 | res.json({
103 | status: 200,
104 | msg: 'success',
105 | data: result
106 | });
107 | });
108 | });
109 | // 团购商品
110 | router.post('/salegroup', function(req, res, next) {
111 | var sql = `SELECT * FROM good WHERE find_in_set('2',GoodItem)`;
112 | connection.query(sql, function(err, result) {
113 | if (err) {
114 | res.json({
115 | status: 500,
116 | msg: err,
117 | data: ''
118 | });
119 | return;
120 | }
121 | res.json({
122 | status: 200,
123 | msg: 'success',
124 | data: result
125 | });
126 | });
127 | });
128 | // 发现
129 | router.post('/discover', function(req, res, next) {
130 | var sql = `SELECT * FROM good WHERE find_in_set('3',GoodItem)`;
131 | connection.query(sql, function(err, result) {
132 | if (err) {
133 | res.json({
134 | status: 500,
135 | msg: err,
136 | data: ''
137 | });
138 | return;
139 | }
140 | res.json({
141 | status: 200,
142 | msg: 'success',
143 | data: result
144 | });
145 | });
146 | });
147 | // 获取购物车里商品数量
148 | router.post('/getCartCount', function(req, res, next) {
149 | var username = req.cookies.username;
150 | var sql = `SELECT COUNT(*) as count FROM cart WHERE Username=?`;
151 | var sqlParams = username;
152 | connection.query(sql, sqlParams, function(err, result) {
153 | if (err) {
154 | res.json({
155 | status: 500,
156 | msg: err,
157 | data: ''
158 | });
159 | return;
160 | }
161 | res.json({
162 | status: 200,
163 | msg: 'success',
164 | data: result
165 | });
166 | });
167 | });
168 | // 获取购物车所有信息
169 | router.post('/getCart', function(req, res, next) {
170 | var username = req.cookies.username;
171 | var sql = `SELECT cart.Cartcount,good.* FROM cart,good WHERE cart.Goodid=good.Goodid AND Username=?`;
172 | var sqlParams = username;
173 | connection.query(sql, sqlParams, function(err, result) {
174 | if (err) {
175 | res.json({
176 | status: 500,
177 | msg: err,
178 | data: ''
179 | });
180 | return;
181 | }
182 | res.json({
183 | status: 200,
184 | msg: 'success',
185 | data: result
186 | });
187 | });
188 | });
189 | // 更新购物车商品数目
190 | router.post('/updateCartCount', function(req, res, next) {
191 | var username = req.cookies.username;
192 | var id = req.body.id;
193 | var num = req.body.num;
194 | var sql = `UPDATE cart SET Cartcount=? WHERE Username=? AND Goodid=?`;
195 | var sqlParams = [num, username, id];
196 | connection.query(sql, sqlParams, function(err, result) {
197 | if (err) {
198 | res.json({
199 | status: 500,
200 | msg: err,
201 | data: ''
202 | });
203 | return;
204 | }
205 | res.json({
206 | status: 200,
207 | msg: 'success',
208 | data: ''
209 | });
210 | });
211 | });
212 | // 添加到购物车
213 | router.post('/addToCart', function(req, res, next) {
214 | var username = req.cookies.username;
215 | var id = req.body.id;
216 | var num = req.body.num;
217 | var sql = `SELECT Cartcount FROM cart WHERE Goodid=? AND Username=?`;
218 | var sqlParams = [id, username];
219 | connection.query(sql, sqlParams, function(err, result) {
220 | if (err) {
221 | res.json({
222 | status: 500,
223 | msg: err,
224 | data: ''
225 | });
226 | return;
227 | }
228 | if (result.length === 0) {
229 | sql = `INSERT INTO cart VALUES (?, ?, ?);`;
230 | sqlParams = [username, id, num];
231 | connection.query(sql, sqlParams, function(err, res1) {
232 | if (err) {
233 | res.json({
234 | status: 500,
235 | msg: err,
236 | data: ''
237 | });
238 | return;
239 | }
240 | res.json({
241 | status: 200,
242 | msg: 'success',
243 | data: ''
244 | });
245 | });
246 | } else {
247 | num += result[0].Cartcount;
248 | sql = `UPDATE cart SET Cartcount=? WHERE Username=? AND Goodid=?`;
249 | sqlParams = [num, username, id];
250 | connection.query(sql, sqlParams, function(err, res2) {
251 | if (err) {
252 | res.json({
253 | status: 500,
254 | msg: err,
255 | data: ''
256 | });
257 | return;
258 | }
259 | res.json({
260 | status: 200,
261 | msg: 'success',
262 | data: ''
263 | });
264 | });
265 | }
266 | });
267 | });
268 | // 删除购物车商品
269 | router.post('/delFromCart', function(req, res, next) {
270 | var username = req.cookies.username;
271 | var delId = req.body.delId;
272 | var delIdStr = '(' + delId.toString() + ')';
273 | var sql = `DELETE FROM cart WHERE Username=? AND Goodid in ${delIdStr}`;
274 | var sqlParams = [username];
275 | connection.query(sql, sqlParams, function(err, result) {
276 | if (err) {
277 | res.json({
278 | status: 500,
279 | msg: err,
280 | data: ''
281 | });
282 | return;
283 | }
284 | res.json({
285 | status: 200,
286 | msg: 'success',
287 | data: ''
288 | });
289 | });
290 | });
291 | // 根据id获取商品
292 | router.post('/getGoodById', function(req, res, next) {
293 | var username = req.cookies.username;
294 | var goodId = req.body.goodId;
295 | var goodIdStr = '(' + goodId.toString() + ')';
296 | var sql = `SELECT * FROM good WHERE Goodid in ${goodIdStr}`;
297 | var sqlParams = [username];
298 | connection.query(sql, sqlParams, function(err, result) {
299 | if (err) {
300 | res.json({
301 | status: 500,
302 | msg: err,
303 | data: ''
304 | });
305 | return;
306 | }
307 | res.json({
308 | status: 200,
309 | msg: 'success',
310 | data: result
311 | });
312 | });
313 | });
314 | // 获取收货地址
315 | router.post('/getAddress', function(req, res, next) {
316 | var username = req.cookies.username;
317 | var sql = `SELECT * FROM address WHERE Username=?`;
318 | var sqlParams = [username];
319 | connection.query(sql, sqlParams, function(err, result) {
320 | if (err) {
321 | res.json({
322 | status: 500,
323 | msg: err,
324 | data: ''
325 | });
326 | return;
327 | }
328 | res.json({
329 | status: 200,
330 | msg: 'success',
331 | data: result
332 | });
333 | });
334 | });
335 | // 获取订单
336 | router.post('/getOrder', function(req, res, next) {
337 | var username = req.cookies.username;
338 | var sql = `SELECT * FROM userorder,usersuborder,good WHERE userorder.Username=? AND userorder.Orderid=usersuborder.MainOrderId AND usersuborder.GoodId = good.Goodid;`;
339 | var sqlParams = [username];
340 | connection.query(sql, sqlParams, function(err, result) {
341 | if (err) {
342 | res.json({
343 | status: 500,
344 | msg: err,
345 | data: ''
346 | });
347 | return;
348 | }
349 | let resultArr = [];
350 | let obj = {};
351 | for (let i = 0; i < result.length; i++) {
352 | const item = result[i];
353 | if (obj[item.Orderid]) {
354 | obj[item.Orderid].goods.push(item);
355 | } else {
356 | const { Orderid, Addressid, totalMoney, Status } = item;
357 | obj[item.Orderid] = {
358 | Orderid,
359 | Addressid,
360 | totalMoney,
361 | Status,
362 | goods: [item]
363 | };
364 | }
365 | }
366 | Object.keys(obj).forEach(function(key) {
367 | resultArr.push(obj[key]);
368 | });
369 | res.json({
370 | status: 200,
371 | msg: 'success',
372 | data: resultArr
373 | });
374 | });
375 | });
376 | // 生成订单
377 | router.post('/createOrder', function(req, res, next) {
378 | var username = req.cookies.username;
379 | var addressId = req.body.addressId;
380 | var goods = req.body.goods;
381 | var totalMoney = req.body.totalMoney;
382 | sql = 'INSERT INTO userorder(Username,Addressid,Status,totalMoney) VALUES(?,?,1,?)';
383 | var sqlParams = [username, addressId, totalMoney];
384 | connection.query(sql, sqlParams, function(err, result) {
385 | if (err) {
386 | res.json({
387 | status: 500,
388 | msg: err,
389 | data: ''
390 | });
391 | return;
392 | }
393 | var arr = [];
394 | for (var i = 0; i < goods.length; i++) {
395 | arr.push([result.insertId, goods[i].Goodid, goods[i].Cartcount]);
396 | }
397 | sql = 'INSERT INTO usersuborder(MainOrderId,GoodId,Count) VALUES ?';
398 | sqlParams = arr;
399 | connection.query(sql, [sqlParams], function(err, result) {
400 | if (err) {
401 | res.json({
402 | status: 500,
403 | msg: err,
404 | data: ''
405 | });
406 | return;
407 | }
408 | res.json({
409 | status: 200,
410 | msg: 'success',
411 | data: result
412 | });
413 | });
414 | });
415 | });
416 | module.exports = router;
417 |
--------------------------------------------------------------------------------
/server/routes/users.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET users listing. */
5 | router.get('/', function(req, res, next) {
6 | res.send('respond with a resource');
7 | });
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/sql/vantstore.sql:
--------------------------------------------------------------------------------
1 | /*
2 | Navicat Premium Data Transfer
3 |
4 | Source Server : 本地
5 | Source Server Type : MySQL
6 | Source Server Version : 50724
7 | Source Host : localhost:3306
8 | Source Schema : vantstore
9 |
10 | Target Server Type : MySQL
11 | Target Server Version : 50724
12 | File Encoding : 65001
13 |
14 | Date: 26/11/2019 11:50:19
15 | */
16 |
17 | SET NAMES utf8mb4;
18 | SET FOREIGN_KEY_CHECKS = 0;
19 |
20 | -- ----------------------------
21 | -- Table structure for address
22 | -- ----------------------------
23 | DROP TABLE IF EXISTS `address`;
24 | CREATE TABLE `address` (
25 | `Username` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
26 | `Addressid` int(11) NOT NULL AUTO_INCREMENT,
27 | `Name` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
28 | `Phonenum` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
29 | `Address` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
30 | `AddressDetail` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
31 | `PostalCode` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
32 | `Isdefault` int(11) NOT NULL DEFAULT 0,
33 | PRIMARY KEY (`Addressid`) USING BTREE
34 | ) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
35 |
36 | -- ----------------------------
37 | -- Records of address
38 | -- ----------------------------
39 | INSERT INTO `address` VALUES ('test@qq.com', 1, '张三', '15555578945', '山东省烟台市芝罘区', '鲁东大学', '271934', 1);
40 | INSERT INTO `address` VALUES ('test@qq.com', 2, '小明', '15535578564', '山东省济南市历下区', '暨南大学', '271934', 0);
41 | INSERT INTO `address` VALUES ('test@qq.com', 3, '李四', '15555578945', '山东省烟台市芝罘区', '烟台大学', '271934', 0);
42 | INSERT INTO `address` VALUES ('test@qq.com', 4, '王五', '15555578945', '山东省青岛市即墨市', '烟台路', '271934', 0);
43 |
44 | -- ----------------------------
45 | -- Table structure for cart
46 | -- ----------------------------
47 | DROP TABLE IF EXISTS `cart`;
48 | CREATE TABLE `cart` (
49 | `Username` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
50 | `Goodid` int(11) NOT NULL,
51 | `Cartcount` int(11) NOT NULL
52 | ) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed;
53 |
54 | -- ----------------------------
55 | -- Records of cart
56 | -- ----------------------------
57 | INSERT INTO `cart` VALUES ('123@qq.com', 7, 2);
58 | INSERT INTO `cart` VALUES ('123@qq.com', 1, 2);
59 | INSERT INTO `cart` VALUES ('test@qq.com', 8, 1);
60 |
61 | -- ----------------------------
62 | -- Table structure for good
63 | -- ----------------------------
64 | DROP TABLE IF EXISTS `good`;
65 | CREATE TABLE `good` (
66 | `Goodid` int(11) NOT NULL AUTO_INCREMENT,
67 | `Goodname` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
68 | `GoodPrice` double NOT NULL,
69 | `GoodPriceaftersale` double NOT NULL,
70 | `Goodcount` int(11) NOT NULL,
71 | `Gooddescribe` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
72 | `Gooddealprice` int(11) NOT NULL,
73 | `GoodItem` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
74 | `GoodImg` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
75 | PRIMARY KEY (`Goodid`) USING BTREE
76 | ) ENGINE = MyISAM AUTO_INCREMENT = 58 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
77 |
78 | -- ----------------------------
79 | -- Records of good
80 | -- ----------------------------
81 | INSERT INTO `good` VALUES (1, '小米6X', 1499, 1299, 966, '小米6X,立减200', 0, '1', '/img/good/pic-1.jpg');
82 | INSERT INTO `good` VALUES (2, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '3,4', '/img/good/pic-2.jpg');
83 | INSERT INTO `good` VALUES (3, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 6, '2', '/img/good/pic-3.jpg');
84 | INSERT INTO `good` VALUES (4, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 0, '1,5,6', '/img/good/pic-4.jpg');
85 | INSERT INTO `good` VALUES (5, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,6', '/img/good/pic-5.jpg');
86 | INSERT INTO `good` VALUES (6, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 0, '3,5', '/img/good/pic-6.jpg');
87 | INSERT INTO `good` VALUES (7, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '2,5', '/img/good/pic-7.jpg');
88 | INSERT INTO `good` VALUES (8, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 0, '1,2,3', '/img/good/pic-2.jpg');
89 | INSERT INTO `good` VALUES (9, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '1,5,6', '/img/good/pic-3.jpg');
90 | INSERT INTO `good` VALUES (10, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 6, '1,6', '/img/good/pic-4.jpg');
91 | INSERT INTO `good` VALUES (11, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '2,6', '/img/good/pic-5.jpg');
92 | INSERT INTO `good` VALUES (12, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '4,6', '/img/good/pic-6.jpg');
93 | INSERT INTO `good` VALUES (13, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '1,5', '/img/good/pic-7.jpg');
94 | INSERT INTO `good` VALUES (14, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 0, '2,5,6', '/img/good/pic-2.jpg');
95 | INSERT INTO `good` VALUES (15, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '1,5', '/img/good/pic-3.jpg');
96 | INSERT INTO `good` VALUES (16, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '3,4,5', '/img/good/pic-4.jpg');
97 | INSERT INTO `good` VALUES (17, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 0, '2,5', '/img/good/pic-5.jpg');
98 | INSERT INTO `good` VALUES (18, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '1,2,5', '/img/good/pic-6.jpg');
99 | INSERT INTO `good` VALUES (19, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '1,5', '/img/good/pic-7.jpg');
100 | INSERT INTO `good` VALUES (20, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '2,3,5', '/img/good/pic-2.jpg');
101 | INSERT INTO `good` VALUES (21, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 0, '1,5', '/img/good/pic-3.jpg');
102 | INSERT INTO `good` VALUES (22, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '2,3,5', '/img/good/pic-4.jpg');
103 | INSERT INTO `good` VALUES (23, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,5', '/img/good/pic-5.jpg');
104 | INSERT INTO `good` VALUES (24, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '2,3,5', '/img/good/pic-6.jpg');
105 | INSERT INTO `good` VALUES (25, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 0, '1,5', '/img/good/pic-7.jpg');
106 | INSERT INTO `good` VALUES (26, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '1,5', '/img/good/pic-2.jpg');
107 | INSERT INTO `good` VALUES (27, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '1,5,6', '/img/good/pic-3.jpg');
108 | INSERT INTO `good` VALUES (28, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '1,25', '/img/good/pic-4.jpg');
109 | INSERT INTO `good` VALUES (29, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,5', '/img/good/pic-5.jpg');
110 | INSERT INTO `good` VALUES (30, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '2,3,4', '/img/good/pic-6.jpg');
111 | INSERT INTO `good` VALUES (31, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '1,5', '/img/good/pic-7.jpg');
112 | INSERT INTO `good` VALUES (32, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '1,2,4', '/img/good/pic-2.jpg');
113 | INSERT INTO `good` VALUES (33, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '1,5', '/img/good/pic-3.jpg');
114 | INSERT INTO `good` VALUES (34, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '2,6', '/img/good/pic-4.jpg');
115 | INSERT INTO `good` VALUES (35, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,5', '/img/good/pic-5.jpg');
116 | INSERT INTO `good` VALUES (36, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '2,6', '/img/good/pic-6.jpg');
117 | INSERT INTO `good` VALUES (37, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '1,5', '/img/good/pic-7.jpg');
118 | INSERT INTO `good` VALUES (38, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '1,4,5', '/img/good/pic-2.jpg');
119 | INSERT INTO `good` VALUES (39, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '1,5', '/img/good/pic-3.jpg');
120 | INSERT INTO `good` VALUES (40, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '3,4,5', '/img/good/pic-4.jpg');
121 | INSERT INTO `good` VALUES (41, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,5', '/img/good/pic-5.jpg');
122 | INSERT INTO `good` VALUES (42, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '2,5', '/img/good/pic-6.jpg');
123 | INSERT INTO `good` VALUES (43, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '2', '/img/good/pic-7.jpg');
124 | INSERT INTO `good` VALUES (44, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '2,3', '/img/good/pic-2.jpg');
125 | INSERT INTO `good` VALUES (45, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '2,3,6', '/img/good/pic-3.jpg');
126 | INSERT INTO `good` VALUES (46, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '4,5', '/img/good/pic-4.jpg');
127 | INSERT INTO `good` VALUES (47, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,2,3', '/img/good/pic-5.jpg');
128 | INSERT INTO `good` VALUES (48, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '1,3,4', '/img/good/pic-6.jpg');
129 | INSERT INTO `good` VALUES (49, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '2,3,4', '/img/good/pic-7.jpg');
130 | INSERT INTO `good` VALUES (50, '小米8', 2399, 2199, 966, '【全版本买就赠手环2】Xiaomi/小米 小米8年度旗舰全面屏骁龙845双频GPS智能拍照游戏手机刘海屏AI', 5, '1,5', '/img/good/pic-2.jpg');
131 | INSERT INTO `good` VALUES (51, '迪士尼商城', 1499, 1399, 966, '当天可定亲子特惠上海迪士尼乐园门票上海迪士尼门票上海迪斯尼票', 5, '2,4', '/img/good/pic-3.jpg');
132 | INSERT INTO `good` VALUES (52, '飞科剃须刀', 99, 66, 56, '飞科剃须刀电动男士刮胡刀全身水洗智能充电式胡须刀正品刮胡子刀', 5, '1,2,6', '/img/good/pic-4.jpg');
133 | INSERT INTO `good` VALUES (53, '华为honor/荣耀 荣耀10', 1266, 1199, 98, '【低至2299】华为honor/荣耀 荣耀10GT游戏加速AIS手持夜景AI摄影全面屏双卡双待全网通8GB手机官方旗舰店', 5, '1,4', '/img/good/pic-5.jpg');
134 | INSERT INTO `good` VALUES (54, '荣耀V10', 2199, 2099, 78, '【28日低至1799 6期免息】华为honor/荣耀 荣耀V10全面屏智能AI变焦双摄拍照商务手机全新官方正品旗舰店', 5, '1,5', '/img/good/pic-6.jpg');
135 | INSERT INTO `good` VALUES (55, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '2,3', '/img/good/pic-7.jpg');
136 | INSERT INTO `good` VALUES (56, '洗衣机', 999, 889, 36, 'Haier/海尔 EB80M39TH 8kg/公斤全自动家用波轮洗衣机 大容量', 5, '1,5,6', '/img/good/pic-7.jpg');
137 |
138 | -- ----------------------------
139 | -- Table structure for item
140 | -- ----------------------------
141 | DROP TABLE IF EXISTS `item`;
142 | CREATE TABLE `item` (
143 | `ItemId` int(11) NOT NULL AUTO_INCREMENT,
144 | `Itemname` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
145 | PRIMARY KEY (`ItemId`) USING BTREE
146 | ) ENGINE = MyISAM AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
147 |
148 | -- ----------------------------
149 | -- Records of item
150 | -- ----------------------------
151 | INSERT INTO `item` VALUES (1, '热销商品');
152 | INSERT INTO `item` VALUES (2, '拼团商品');
153 | INSERT INTO `item` VALUES (3, '发现');
154 | INSERT INTO `item` VALUES (4, '限时折扣');
155 | INSERT INTO `item` VALUES (5, '主题精选');
156 | INSERT INTO `item` VALUES (6, '生活用品');
157 |
158 | -- ----------------------------
159 | -- Table structure for user
160 | -- ----------------------------
161 | DROP TABLE IF EXISTS `user`;
162 | CREATE TABLE `user` (
163 | `Username` char(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
164 | `Password` char(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
165 | ) ENGINE = MyISAM CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Fixed;
166 |
167 | -- ----------------------------
168 | -- Records of user
169 | -- ----------------------------
170 | INSERT INTO `user` VALUES ('test@qq.com', '9c67e149bf846087c5b0043bb40eb35f');
171 | INSERT INTO `user` VALUES ('123@qq.com', '9c67e149bf846087c5b0043bb40eb35f');
172 | INSERT INTO `user` VALUES ('1234@qq.com', 'dee63eca4b76ca4d7a83ead699063302');
173 | INSERT INTO `user` VALUES ('12345@qq.com', '9c67e149bf846087c5b0043bb40eb35f');
174 | INSERT INTO `user` VALUES ('123456@qq.com', 'dee63eca4b76ca4d7a83ead699063302');
175 |
176 | -- ----------------------------
177 | -- Table structure for userorder
178 | -- ----------------------------
179 | DROP TABLE IF EXISTS `userorder`;
180 | CREATE TABLE `userorder` (
181 | `Orderid` int(11) NOT NULL AUTO_INCREMENT,
182 | `Username` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
183 | `Addressid` int(11) NOT NULL,
184 | `totalMoney` int(11) NOT NULL,
185 | `Status` int(11) NOT NULL DEFAULT 0,
186 | PRIMARY KEY (`Orderid`) USING BTREE
187 | ) ENGINE = MyISAM AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed;
188 |
189 | -- ----------------------------
190 | -- Records of userorder
191 | -- ----------------------------
192 | INSERT INTO `userorder` VALUES (11, 'test@qq.com', 1, 198, 1);
193 | INSERT INTO `userorder` VALUES (10, 'test@qq.com', 1, 66, 1);
194 | INSERT INTO `userorder` VALUES (9, 'test@qq.com', 1, 2397, 1);
195 | INSERT INTO `userorder` VALUES (8, 'test@qq.com', 1, 132, 1);
196 |
197 | -- ----------------------------
198 | -- Table structure for usersuborder
199 | -- ----------------------------
200 | DROP TABLE IF EXISTS `usersuborder`;
201 | CREATE TABLE `usersuborder` (
202 | `id` int(11) NOT NULL AUTO_INCREMENT,
203 | `MainOrderId` int(11) NOT NULL,
204 | `GoodId` int(11) NOT NULL,
205 | `Count` int(11) NOT NULL,
206 | PRIMARY KEY (`id`) USING BTREE
207 | ) ENGINE = MyISAM AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed;
208 |
209 | -- ----------------------------
210 | -- Records of usersuborder
211 | -- ----------------------------
212 | INSERT INTO `usersuborder` VALUES (8, 11, 4, 3);
213 | INSERT INTO `usersuborder` VALUES (7, 10, 4, 1);
214 | INSERT INTO `usersuborder` VALUES (6, 9, 8, 1);
215 | INSERT INTO `usersuborder` VALUES (5, 9, 4, 3);
216 |
217 | SET FOREIGN_KEY_CHECKS = 1;
218 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
21 |
31 |
--------------------------------------------------------------------------------
/src/api/api.js:
--------------------------------------------------------------------------------
1 | import { get, post } from '@/util/http';
2 | export const test = () => get('/');
3 | export const login = params => post('login', params);
4 | export const reg = params => post('reg', params);
5 | export const hotSale = () => post('hotsale');
6 | export const saleGroup = () => post('salegroup');
7 | export const discover = () => post('discover');
8 | export const getCartCount = () => post('getCartCount');
9 | export const getCart = () => post('getCart');
10 | export const updateCartCount = params => post('updateCartCount', params);
11 | export const addToCart = params => post('addToCart', params);
12 | export const delFromCart = params => post('delFromCart', params);
13 | export const getAddress = () => post('getAddress');
14 | export const getOrder = () => post('getOrder');
15 | export const createOrder = params => post('createOrder', params);
16 | export const getGoodById = params => post('getGoodById', params);
17 |
--------------------------------------------------------------------------------
/src/components/backgroundImg/backgroundImg.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
# {{topic}}
5 |
{{desc}}
6 |
7 |
8 |
9 |
10 |
37 |
38 |
67 |
--------------------------------------------------------------------------------
/src/components/github/github.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
15 |
16 |
77 |
--------------------------------------------------------------------------------
/src/components/goodItem/goodItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{title}}
6 | {{describe}}
7 |
8 | 更多
9 |
10 |
11 |
12 |
13 |
14 |
15 |
27 |
28 |
57 |
--------------------------------------------------------------------------------
/src/components/scroll/scrollX.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
122 |
123 |
149 |
--------------------------------------------------------------------------------
/src/components/scroll/scrollY.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
79 |
--------------------------------------------------------------------------------
/src/components/tabItem/tabItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
{{item.Gooddescribe}}
7 |
8 | ¥{{item.GoodPrice}}
9 |
10 | ¥{{item.GoodPriceaftersale}}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
38 |
39 |
79 |
--------------------------------------------------------------------------------
/src/images/bgc/bgc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/bgc/bgc.jpg
--------------------------------------------------------------------------------
/src/images/detail/detail-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/detail/detail-1.jpg
--------------------------------------------------------------------------------
/src/images/detail/detail-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/detail/detail-2.jpg
--------------------------------------------------------------------------------
/src/images/detail/detail-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/detail/detail-3.jpg
--------------------------------------------------------------------------------
/src/images/detail/detail-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/detail/detail-4.jpg
--------------------------------------------------------------------------------
/src/images/detail/detail-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/detail/detail-5.jpg
--------------------------------------------------------------------------------
/src/images/detail/detail-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/detail/detail-6.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-1.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-2.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-3.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-4.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-5.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-6.jpg
--------------------------------------------------------------------------------
/src/images/good/pic-7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/good/pic-7.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe-1.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe-2.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe-3.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe-4.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe1-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe1-1.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe1-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe1-2.jpg
--------------------------------------------------------------------------------
/src/images/swipe/swipe1-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pwx123/vue-vant-store/d9a179a04978cb424f084afc1a3ec6d71624446e/src/images/swipe/swipe1-3.jpg
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from './App.vue';
3 | import Vant from 'vant';
4 | import { Lazyload } from 'vant';
5 | import 'vant/lib/vant-css/index.css';
6 | import router from './router';
7 | import store from './store';
8 | Vue.use(Vant);
9 | Vue.use(Lazyload);
10 | Vue.config.productionTip = false;
11 |
12 | new Vue({
13 | router,
14 | store,
15 | render: h => h(App)
16 | }).$mount('#app');
17 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Router from 'vue-router';
3 | const Home = () => import(/* webpackChunkName: "Home" */ '@/views/Home/Home');
4 | const Cart = () => import(/* webpackChunkName: "Cart" */ '@/views/Cart/Cart');
5 | const User = () => import(/* webpackChunkName: "User" */ '@/views/User/User');
6 | const Login = () => import(/* webpackChunkName: "Login" */ '@/views/Login/Login');
7 | const Reg = () => import(/* webpackChunkName: "Reg" */ '@/views/Reg/Reg');
8 | const Good = () => import(/* webpackChunkName: "Good" */ '@/views/Good/Good');
9 | const NotFound = () => import(/* webpackChunkName: "NotFound" */ '@/views/NotFound/NotFound');
10 | const Order = () => import(/* webpackChunkName: "Order" */ '@/views/Order/Order');
11 | const AddressList = () => import(/* webpackChunkName: "AddressList" */ '@/views/AddressList/AddressList');
12 | const EditAddress = () => import(/* webpackChunkName: "EditAddress" */ '@/views/EditAddress/EditAddress');
13 | const OrderList = () => import(/* webpackChunkName: "OrderList" */ '@/views/OrderList/OrderList');
14 |
15 | Vue.use(Router);
16 |
17 | export default new Router({
18 | routes: [
19 | {
20 | path: '/',
21 | name: 'Home',
22 | component: Home
23 | },
24 | {
25 | path: '/Cart',
26 | name: 'Cart',
27 | component: Cart
28 | },
29 | {
30 | path: '/User',
31 | name: 'User',
32 | component: User
33 | },
34 | {
35 | path: '/Login',
36 | name: 'Login',
37 | component: Login,
38 | meta: {
39 | fullScreen: true
40 | }
41 | },
42 | {
43 | path: '/Reg',
44 | name: 'Reg',
45 | component: Reg,
46 | meta: {
47 | fullScreen: true
48 | }
49 | },
50 | {
51 | path: '/Good',
52 | name: 'Good',
53 | component: Good,
54 | meta: {
55 | fullScreen: true
56 | }
57 | },
58 | {
59 | path: '/Order',
60 | name: 'Order',
61 | component: Order,
62 | meta: {
63 | fullScreen: true
64 | }
65 | },
66 | {
67 | path: '/AddressList',
68 | name: 'AddressList',
69 | component: AddressList,
70 | meta: {
71 | fullScreen: true
72 | }
73 | },
74 | {
75 | path: '/EditAddress',
76 | name: 'EditAddress',
77 | component: EditAddress,
78 | meta: {
79 | fullScreen: true
80 | }
81 | },
82 | {
83 | path: '/OrderList',
84 | name: 'OrderList',
85 | component: OrderList,
86 | meta: {
87 | fullScreen: true
88 | }
89 | },
90 | {
91 | path: '*',
92 | name: 'Notfound',
93 | component: NotFound,
94 | meta: {
95 | fullScreen: true
96 | }
97 | }
98 | ],
99 | scrollBehavior(to, from, savedPosition) {
100 | return {
101 | x: 0,
102 | y: 0
103 | };
104 | }
105 | });
106 |
--------------------------------------------------------------------------------
/src/store/getters.js:
--------------------------------------------------------------------------------
1 | const getters = {
2 | good: state => {
3 | return state.good;
4 | },
5 | orderGood: state => {
6 | return state.orderGood;
7 | },
8 | addressList: state => {
9 | return state.addressList;
10 | },
11 | editAddress: state => {
12 | return state.editAddress;
13 | },
14 | addressId: state => {
15 | return state.addressId;
16 | }
17 | };
18 | export default getters;
19 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 | import state from './state';
4 | import getters from './getters';
5 | import mutations from './mutations';
6 |
7 | Vue.use(Vuex);
8 |
9 | export default new Vuex.Store({
10 | state,
11 | getters,
12 | mutations
13 | });
14 |
--------------------------------------------------------------------------------
/src/store/mutations-types.js:
--------------------------------------------------------------------------------
1 | export const SET_GOOD_MUTATION = 'SET_GOOD_MUTATION';
2 | export const SET_ORDERGOOD_MUTATION = 'SET_ORDERGOOD_MUTATION';
3 | export const SET_ADDRESSLIST_MUTATION = 'SET_ADDRESSLIST_MUTATION';
4 | export const SET_EDITADDRESS_MUTATION = 'SET_EDITADDRESS_MUTATION';
5 | export const SET_ADDRESSID_MUTATION = 'SET_ADDRESSID_MUTATION';
6 |
--------------------------------------------------------------------------------
/src/store/mutations.js:
--------------------------------------------------------------------------------
1 | import * as types from './mutations-types';
2 |
3 | const mutations = {
4 | [types.SET_GOOD_MUTATION](state, payload) {
5 | state.good = payload;
6 | },
7 | [types.SET_ORDERGOOD_MUTATION](state, payload) {
8 | state.orderGood = payload;
9 | },
10 | [types.SET_ADDRESSLIST_MUTATION](state, payload) {
11 | state.addressList = payload;
12 | },
13 | [types.SET_EDITADDRESS_MUTATION](state, payload) {
14 | state.editAddress = payload;
15 | },
16 | [types.SET_ADDRESSID_MUTATION](state, payload) {
17 | state.addressId = payload;
18 | }
19 | };
20 |
21 | export default mutations;
22 |
--------------------------------------------------------------------------------
/src/store/state.js:
--------------------------------------------------------------------------------
1 | const state = {
2 | good: {},
3 | orderGood: {},
4 | addressList: [],
5 | editAddress: {
6 | Username: '',
7 | Addressid: '',
8 | Name: '',
9 | Phonenum: '',
10 | Address: '',
11 | AddressDetail: '',
12 | PostalCode: '',
13 | Isdefault: 0
14 | },
15 | addressId: ''
16 | };
17 | export default state;
18 |
--------------------------------------------------------------------------------
/src/util/http.js:
--------------------------------------------------------------------------------
1 | // 引入 axios
2 | import axios from 'axios';
3 | import { Toast } from 'vant';
4 | import router from '@/router';
5 |
6 | // 环境的切换
7 | if (process.env.NODE_ENV == 'development') {
8 | axios.defaults.baseURL = '/api';
9 | } else {
10 | axios.defaults.baseURL = '/api';
11 | }
12 |
13 | // 超时时间
14 | axios.defaults.timeout = 10000;
15 | axios.defaults.withCredentials = true;
16 | // 响应拦截
17 | axios.interceptors.response.use(
18 | response => {
19 | if (response.status === 200) {
20 | return Promise.resolve(response);
21 | } else {
22 | return Promise.reject(response);
23 | }
24 | },
25 | // 服务器状态码不是200的情况
26 | error => {
27 | if (error.response.status) {
28 | switch (error.response.status) {
29 | case 401:
30 | router.replace({
31 | path: '/login',
32 | query: {
33 | redirect: router.currentRoute.fullPath
34 | }
35 | });
36 | break;
37 | case 404:
38 | Toast({
39 | message: '网络请求不存在',
40 | duration: 1500,
41 | forbidClick: true
42 | });
43 | break;
44 | default:
45 | Toast({
46 | message: error.response.data.message,
47 | duration: 1500,
48 | forbidClick: true
49 | });
50 | }
51 | return Promise.reject(error.response);
52 | }
53 | }
54 | );
55 |
56 | export function get(url, params) {
57 | return new Promise((resolve, reject) => {
58 | axios
59 | .get(url, {
60 | params: params
61 | })
62 | .then(res => {
63 | resolve(res.data);
64 | })
65 | .catch(err => {
66 | reject(err.data);
67 | });
68 | });
69 | }
70 |
71 | export function post(url, params) {
72 | return new Promise((resolve, reject) => {
73 | axios
74 | .post(url, params)
75 | .then(res => {
76 | resolve(res.data);
77 | })
78 | .catch(err => {
79 | reject(err.data);
80 | });
81 | });
82 | }
83 |
--------------------------------------------------------------------------------
/src/util/util.js:
--------------------------------------------------------------------------------
1 | export function emailCheck(email) {
2 | var emailreg = /^([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
3 | if (!emailreg.test(email)) {
4 | return false;
5 | }
6 | return true;
7 | }
8 | export function pwdCheck(pwd) {
9 | var pwdreg = /^[a-zA-Z]\w{5,17}$/;
10 | if (!pwdreg.test(pwd)) {
11 | return false;
12 | }
13 | return true;
14 | }
15 | export function phoneNumCheck(phoneNUm) {
16 | var phoneNumreg = /^[1][3,4,5,7,8][0-9]{9}$/;
17 | if (!phoneNumreg.test(phoneNUm)) {
18 | return false;
19 | }
20 | return true;
21 | }
22 | export function stringCheck(string) {
23 | var result = removeSpace(string);
24 | if (result.length === 0) {
25 | return false;
26 | }
27 | return true;
28 | }
29 |
30 | function removeSpace(string) {
31 | var result;
32 | result = string.trim();
33 | result = result.replace(/\s/g, '');
34 | return result;
35 | }
36 |
37 | export function timeFormat(time) {
38 | let date = new Date(time);
39 | let month = date.getMonth() + 1;
40 | let day = date.getDay();
41 | let hour = date.getHours();
42 | let minutes = date.getMinutes();
43 | let str = `${month}-${day} ${hour}:${minutes}`;
44 | return str;
45 | }
46 |
--------------------------------------------------------------------------------
/src/views/AddressList/AddressList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
16 |
17 |
18 |
19 |
20 |
83 |
84 |
95 |
--------------------------------------------------------------------------------
/src/views/Cart/Cart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
10 |
购物车空空的,快去购物吧~
11 |
去首页
14 |
15 |
17 |
21 |
26 |
43 |
44 |
45 |
46 |
50 |
51 |
53 | -
55 |
56 |
57 |
59 |
60 |
62 | +
64 |
65 |
66 |
67 |
73 |
75 | {{checkedAllMsg}}
76 |
77 |
78 |
79 |
80 |
81 |
334 |
335 |
411 |
--------------------------------------------------------------------------------
/src/views/EditAddress/EditAddress.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
14 |
33 |
34 |
42 |
--------------------------------------------------------------------------------
/src/views/Good/Good.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
10 |
12 |
14 |
15 |
16 |
17 |
18 |
19 | {{good.Goodname}}
20 | ¥{{good.GoodPriceaftersale}}
21 |
22 | {{good.Gooddescribe}}
23 |
24 |
25 |
26 | 运费:{{good.Gooddealprice===0?'免运费':good.Gooddealprice+'元'}}
28 | 剩余:{{good.Goodcount}}
30 |
31 |
32 |
33 |
34 |
37 |
38 | 进入店铺
39 |
40 |
41 |
44 |
45 |
46 |
49 |
50 |
52 |

54 |

56 |

58 |

60 |

62 |

64 |
65 |
66 |
68 |
71 |
73 |
75 |
78 |
79 |
86 |
87 |
88 |
89 |
90 |
276 |
332 |
--------------------------------------------------------------------------------
/src/views/Home/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 搜索
5 |
6 |
7 |
8 | 今日推荐
9 | 每天都有新发现
10 |
11 | {{indexPage+1}}
12 | /4
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
35 |
36 |
37 |
40 |
43 |
44 |
45 |
46 |
47 |
朋友圈的好货推荐
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
134 |
135 |
225 |
--------------------------------------------------------------------------------
/src/views/Login/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
登陆商城
5 |
6 |
7 |
8 |
9 |
10 |
11 | 登陆
12 |
13 |
14 | 注册
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
84 |
85 |
116 |
--------------------------------------------------------------------------------
/src/views/NotFound/NotFound.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 404
4 |
5 |
6 |
7 |
10 |
11 |
13 |
--------------------------------------------------------------------------------
/src/views/Order/Order.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
13 |
15 |
16 |
17 |
18 |
19 |
20 | {{hasDefaultAddress?defaultAddress.Name:'添加收货地址'}}
21 | {{defaultAddress.Phonenum}}
23 |
24 |
26 |
{{defaultAddress.Address}}{{defaultAddress.AddressDetail}}
27 |
28 |
29 |
30 |
34 |
35 |
40 |
41 |
43 |
46 |
49 |
50 |
51 |
52 |
53 |
56 |
57 |
58 |
60 |
61 |
62 |
65 |
66 |
67 |
68 |
69 |
176 |
177 |
259 |
--------------------------------------------------------------------------------
/src/views/OrderList/OrderList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
15 |
23 |
24 | 查看商品
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
76 |
109 |
--------------------------------------------------------------------------------
/src/views/Reg/Reg.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
用户注册
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 注册
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
81 |
82 |
113 |
--------------------------------------------------------------------------------
/src/views/Tab/Tab.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 首页
5 | 购物车
6 | 用户
7 |
8 |
9 |
10 |
11 |
37 |
38 |
40 |
--------------------------------------------------------------------------------
/src/views/User/User.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

6 |
7 |
8 |
9 | 待付款
10 |
11 |
12 |
13 | 待接单
14 |
15 |
16 |
17 | 待发货
18 |
19 |
20 |
21 | 待收货
22 |
23 |
24 |
25 |
29 |
30 |
33 |
36 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
70 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | baseUrl: './',
3 | devServer: {
4 | proxy: {
5 | '/api': {
6 | target: 'http://127.0.0.1:3000',
7 | ws: true,
8 | changeOrigin: true,
9 | pathRewrite: {
10 | '^/api': '/'
11 | }
12 | },
13 | '/img': {
14 | target: 'http://127.0.0.1:80',
15 | changeOrigin: true
16 | }
17 | }
18 | }
19 | };
20 |
--------------------------------------------------------------------------------