master
汤宜默 2 weeks ago
commit 74309e8ed6

Binary file not shown.

@ -0,0 +1,29 @@
const mysql = require("mysql");
const MySQLObj = {
host:"39.97.109.85",
user:"root",
password:"910403",
database:"mpshop"
}
const pool = mysql.createPool(MySQLObj)
function SQLConnect(sql,arr,callback){
pool.getConnection((err, connection) =>{
if (err) {
console.log(err);
return;
}
connection.query(sql, arr, (err, result) => {
//释放连接
connection.release();
if (err) {
console.log(err);
return;
}
callback(result);
});
})
}
module.exports = SQLConnect

@ -0,0 +1,60 @@
{
"list":[
{
"title":"松下PanasonicDC-BS1HGK微单相机 数码相机 模块化摄影机 视频 直播多机位 电影",
"price":"21298"
},
{
"title":"南孚5号充电锂电池4粒套装 1.5V恒压快充 TENAVOLTS 适用游戏手柄/键鼠/话筒/吸奶器/血压计/闪光灯等 AA五号",
"price":"159"
},
{
"title":"佳能Canon 5d4 5D Mark IV全画幅专业级4K高清视频数码单反相机套机 佳能5D4 5D4单机身/拆机身(不含镜头) 官方标配",
"price":"4099"
},
{
"title":"Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待",
"price":"21298"
},
{
"title":"徕纳 适用EOS5D4相机兔笼佳能5D3单反微单相机5d2兔笼配件拓展套件多接口铝合金全包防摔保护框 黑色",
"price":"310"
},
{
"title":"kapaier小提琴弱音器专业消音器减小音静音 提琴配件 小提琴【4/4-3/4-1/2】",
"price":"68"
},
{
"title":"倍思 氮化镓GaN100W充电器套装适用pd20W苹果13/12手机多口Type-C快充头MacBook华为小米笔记本电脑65W插头黑",
"price":"199"
},
{
"title":"佳能CanonEOS 5D Mark IV 5D4全画幅单反相机 单机身",
"price":"16499"
},
{
"title":"ROKID Air 若琪智能眼镜 AR眼镜手机电脑投屏眼镜非VR一体机游戏3D大屏显示器虚拟 太空银【支持DP输出的设备专属】",
"price":"2999"
},
{
"title":"【次日达】SmallRig斯莫格 佳能5D4兔笼 Canon 5D3相机配件竖拍 2271",
"price":"699"
},
{
"title":"梦特娇 MONTAGUT 单肩包女真牛皮女士手提包大容量斜挎包包女七夕情人节礼物 送女友 米白色R7612376213",
"price":"1318"
},
{
"title":"南孚(NANFU)5号充电锂电池20粒 1.5V TENAVOLTS 适用于KTV无线麦克风 AA五号",
"price":"550"
},
{
"title":"爱奇艺 奇遇Dream Pro 8G+128G会员版 4K VR一体机 骁龙XR2 PC串流Steam游戏",
"price":"2799"
},
{
"title":"ROYAL CANIN 皇家猫粮 I27 Indoor27室内成猫猫粮 通用粮 2kg",
"price":"120"
}
]
}

@ -0,0 +1,55 @@
{
"status":200,
"data":[
{
"id":1001,
"title":"松下PanasonicDC-BS1HGK微单相机 数码相机 模块化摄影机 视频 直播多机位 电影",
"price":"21298"
},
{
"id":1002,
"title":"南孚5号充电锂电池4粒套装 1.5V恒压快充 TENAVOLTS 适用游戏手柄/键鼠/话筒/吸奶器/血压计/闪光灯等 AA五号",
"price":"159"
},
{
"id":1003,
"title":"佳能Canon 5d4 5D Mark IV全画幅专业级4K高清视频数码单反相机套机 佳能5D4 5D4单机身/拆机身(不含镜头) 官方标配",
"price":"15988"
},
{
"id":1004,
"title":"倍思 氮化镓GaN100W充电器套装适用pd20W苹果13/12手机多口Type-C快充头MacBook华为小米笔记本电脑65W插头黑",
"price":"199"
},
{
"id":1005,
"title":"佳能Canon 5d4 Mark IV专业级全画幅高级单反摄影像照相机 24-70+70-200+闪光灯+手柄+套餐五",
"price":"60499"
},
{
"id":1006,
"title":"kapaier小提琴弱音器专业消音器减小音静音 提琴配件 小提琴【4/4-3/4-1/2】",
"price":"68"
},
{
"id":1007,
"title":"徕纳 适用EOS5D4相机兔笼佳能5D3单反微单相机5d2兔笼配件拓展套件多接口铝合金全包防摔保护框 黑色",
"price":"310"
},
{
"id":1008,
"title":"Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待",
"price":"4099"
},
{
"id":1009,
"title":"ROKID Air 若琪智能眼镜 AR眼镜手机电脑投屏眼镜非VR一体机游戏3D大屏显示器虚拟 太空银【支持DP输出的设备专属】",
"price":"2999"
},
{
"id":1010,
"title":"倍思 氮化镓GaN三代65W充电器套装适用20W苹果13/12多口PD快充头华为小米macbook笔记本适配插头100W数据线黑",
"price":"118"
}
]
}

@ -0,0 +1,206 @@
/*
Navicat Premium Data Transfer
Source Server : iwen
Source Server Type : MySQL
Source Server Version : 50560
Source Host : 39.97.109.85:3306
Source Schema : mpshop
Target Server Type : MySQL
Target Server Version : 50560
File Encoding : 65001
Date: 08/08/2022 15:36:53
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for banner
-- ----------------------------
DROP TABLE IF EXISTS `banner`;
CREATE TABLE `banner` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` text NOT NULL,
`descs` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of banner
-- ----------------------------
BEGIN;
INSERT INTO `banner` VALUES (1, 'http://iwenwiki.com:3001/images/banner/1.jpg', '测试');
INSERT INTO `banner` VALUES (2, 'http://iwenwiki.com:3001/images/banner/2.png', '测试');
INSERT INTO `banner` VALUES (3, 'http://iwenwiki.com:3001/images/banner/3.jpg', '测试');
INSERT INTO `banner` VALUES (4, 'http://iwenwiki.com:3001/images/banner/4.jpg', '测试');
COMMIT;
-- ----------------------------
-- Table structure for cart
-- ----------------------------
DROP TABLE IF EXISTS `cart`;
CREATE TABLE `cart` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`title` text,
`image` mediumtext,
`price` text,
`currentID` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='newTable';
-- ----------------------------
-- Records of cart
-- ----------------------------
BEGIN;
INSERT INTO `cart` VALUES (19, '倍思 氮化镓GaN100W充电器套装适用pd20W苹果13/12手机多口Type-C快充头MacBook华为小米笔记本电脑65W插头黑', 'http://iwenwiki.com:3001/images/details/d7.webp', '199', 7);
INSERT INTO `cart` VALUES (20, '爱奇艺 奇遇Dream Pro 8G+128G会员版 4K VR一体机 骁龙XR2 PC串流Steam游戏', 'http://iwenwiki.com:3001/images/details/d13.webp', '2799', 13);
INSERT INTO `cart` VALUES (21, 'Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待', 'http://iwenwiki.com:3001/images/details/d4.webp', '21298', 4);
COMMIT;
-- ----------------------------
-- Table structure for category
-- ----------------------------
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`tag` text,
`image` text,
`cate` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='newTable';
-- ----------------------------
-- Records of category
-- ----------------------------
BEGIN;
INSERT INTO `category` VALUES (1, '空调', 'http://iwenwiki.com:3001/images/category/r1.jpg', '热门推荐');
INSERT INTO `category` VALUES (2, '冰箱', 'http://iwenwiki.com:3001/images/category/r2.jpg', '热门推荐');
INSERT INTO `category` VALUES (3, '电脑', 'http://iwenwiki.com:3001/images/category/r3.png', '热门推荐');
INSERT INTO `category` VALUES (4, '手机', 'http://iwenwiki.com:3001/images/category/r4.png', '热门推荐');
INSERT INTO `category` VALUES (5, '口罩', 'http://iwenwiki.com:3001/images/category/r5.jpg', '热门推荐');
INSERT INTO `category` VALUES (6, '书籍', 'http://iwenwiki.com:3001/images/category/r6.jpg', '手机数码');
INSERT INTO `category` VALUES (7, '小米', 'http://iwenwiki.com:3001/images/category/r7.png', '手机数码');
INSERT INTO `category` VALUES (8, 'Apple', 'http://iwenwiki.com:3001/images/category/r8.jpg', '手机数码');
COMMIT;
-- ----------------------------
-- Table structure for goods
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` text NOT NULL,
`price` text NOT NULL,
`url` text,
`tag` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of goods
-- ----------------------------
BEGIN;
INSERT INTO `goods` VALUES (1, '松下PanasonicDC-BS1HGK微单相机 数码相机 模块化摄影机 视频 直播多机位 电影', '21298', 'http://iwenwiki.com:3001/images/goods/1.webp', '热门推荐');
INSERT INTO `goods` VALUES (2, '南孚5号充电锂电池4粒套装 1.5V恒压快充 TENAVOLTS 适用游戏手柄/键鼠/话筒/吸奶器/血压计/闪光灯等 AA五号', '159', 'http://iwenwiki.com:3001/images/goods/2.webp', '热门推荐');
INSERT INTO `goods` VALUES (3, '佳能Canon 5d4 5D Mark IV全画幅专业级4K高清视频数码单反相机套机 佳能5D4 5D4单机身/拆机身(不含镜头) 官方标配', '15988', 'http://iwenwiki.com:3001/images/goods/3.webp', '热门推荐');
INSERT INTO `goods` VALUES (4, '倍思 氮化镓GaN100W充电器套装适用pd20W苹果13/12手机多口Type-C快充头MacBook华为小米笔记本电脑65W插头黑', '199', 'http://iwenwiki.com:3001/images/goods/4.webp', '手机数码');
INSERT INTO `goods` VALUES (5, '佳能Canon 5d4 Mark IV专业级全画幅高级单反摄影像照相机 24-70+70-200+闪光灯+手柄+套餐五', '60499', 'http://iwenwiki.com:3001/images/goods/5.webp', '手机数码');
INSERT INTO `goods` VALUES (6, 'kapaier小提琴弱音器专业消音器减小音静音 提琴配件 小提琴【4/4-3/4-1/2】', '68', 'http://iwenwiki.com:3001/images/goods/6.webp', '手机数码');
INSERT INTO `goods` VALUES (7, '徕纳 适用EOS5D4相机兔笼佳能5D3单反微单相机5d2兔笼配件拓展套件多接口铝合金全包防摔保护框 黑色', '310', 'http://iwenwiki.com:3001/images/goods/7.webp', '手机数码');
INSERT INTO `goods` VALUES (8, 'Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待', '4099', 'http://iwenwiki.com:3001/images/goods/8.webp', '手机数码');
INSERT INTO `goods` VALUES (9, 'ROKID Air 若琪智能眼镜 AR眼镜手机电脑投屏眼镜非VR一体机游戏3D大屏显示器虚拟 太空银【支持DP输出的设备专属】', '2999', 'http://iwenwiki.com:3001/images/goods/9.webp', '家用电器');
INSERT INTO `goods` VALUES (10, '倍思 氮化镓GaN三代65W充电器套装适用20W苹果13/12多口PD快充头华为小米macbook笔记本适配插头100W数据线黑', '118', 'http://iwenwiki.com:3001/images/goods/10.webp', '家用电器');
INSERT INTO `goods` VALUES (11, '【次日达】SmallRig斯莫格 佳能5D4兔笼 Canon 5D3相机配件竖拍 2271', '699', 'http://iwenwiki.com:3001/images/goods/11.webp', '家用电器');
INSERT INTO `goods` VALUES (12, '南孚(NANFU)5号电池12粒 五号碱性 聚能环3代 适用玩具血压计血糖仪挂钟键盘遥控器等', '29', 'http://iwenwiki.com:3001/images/goods/12.webp', '家用电器');
INSERT INTO `goods` VALUES (13, 'Pandora潘多拉幽蓝星河琉璃串饰925银DIY礼物 送女友 790015C00 幽蓝星河玻璃 均码', '348', 'http://iwenwiki.com:3001/images/goods/13.webp', '电脑办公');
INSERT INTO `goods` VALUES (14, 'Apple iPhone 13 Pro Max (A2644) 128GB 远峰蓝色 支持移动联通电信5G 双卡双待手机(上海电信)', '8699', 'http://iwenwiki.com:3001/images/goods/14.webp', '电脑办公');
COMMIT;
-- ----------------------------
-- Table structure for goodsdetails
-- ----------------------------
DROP TABLE IF EXISTS `goodsdetails`;
CREATE TABLE `goodsdetails` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`title` text,
`details` text,
`price` text,
`topimage` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='newTable';
-- ----------------------------
-- Records of goodsdetails
-- ----------------------------
BEGIN;
INSERT INTO `goodsdetails` VALUES (1, '松下PanasonicDC-BS1HGK微单相机 数码相机 模块化摄影机 视频 直播多机位 电影', 'http://iwenwiki.com:3001/images/details/s1.jpg', '21298', 'http://iwenwiki.com:3001/images/details/d1.webp');
INSERT INTO `goodsdetails` VALUES (2, '南孚5号充电锂电池4粒套装 1.5V恒压快充 TENAVOLTS 适用游戏手柄/键鼠/话筒/吸奶器/血压计/闪光灯等 AA五号', 'http://iwenwiki.com:3001/images/details/s2.jpg', '159', 'http://iwenwiki.com:3001/images/details/d2.webp');
INSERT INTO `goodsdetails` VALUES (3, '佳能Canon 5d4 5D Mark IV全画幅专业级4K高清视频数码单反相机套机 佳能5D4 5D4单机身/拆机身(不含镜头) 官方标配', 'http://iwenwiki.com:3001/images/details/s3.webp', '4099', 'http://iwenwiki.com:3001/images/details/d3.webp');
INSERT INTO `goodsdetails` VALUES (4, 'Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待', 'http://iwenwiki.com:3001/images/details/s4.webp', '21298', 'http://iwenwiki.com:3001/images/details/d4.webp');
INSERT INTO `goodsdetails` VALUES (5, '徕纳 适用EOS5D4相机兔笼佳能5D3单反微单相机5d2兔笼配件拓展套件多接口铝合金全包防摔保护框 黑色', 'http://iwenwiki.com:3001/images/details/s5.webp', '310', 'http://iwenwiki.com:3001/images/details/d5.webp');
INSERT INTO `goodsdetails` VALUES (6, 'kapaier小提琴弱音器专业消音器减小音静音 提琴配件 小提琴【4/4-3/4-1/2】', 'http://iwenwiki.com:3001/images/details/s6.webp', '68', 'http://iwenwiki.com:3001/images/details/d6.webp');
INSERT INTO `goodsdetails` VALUES (7, '倍思 氮化镓GaN100W充电器套装适用pd20W苹果13/12手机多口Type-C快充头MacBook华为小米笔记本电脑65W插头黑', 'http://iwenwiki.com:3001/images/details/s7.webp', '199', 'http://iwenwiki.com:3001/images/details/d7.webp');
INSERT INTO `goodsdetails` VALUES (8, '佳能CanonEOS 5D Mark IV 5D4全画幅单反相机 单机身', 'http://iwenwiki.com:3001/images/details/s8.jpg', '16499', 'http://iwenwiki.com:3001/images/details/d8.webp');
INSERT INTO `goodsdetails` VALUES (9, 'ROKID Air 若琪智能眼镜 AR眼镜手机电脑投屏眼镜非VR一体机游戏3D大屏显示器虚拟 太空银【支持DP输出的设备专属】', 'http://iwenwiki.com:3001/images/details/s9.jpg', '2999', 'http://iwenwiki.com:3001/images/details/d9.webp');
INSERT INTO `goodsdetails` VALUES (10, '【次日达】SmallRig斯莫格 佳能5D4兔笼 Canon 5D3相机配件竖拍 2271', 'http://iwenwiki.com:3001/images/details/s10.webp', '699', 'http://iwenwiki.com:3001/images/details/d10.webp');
INSERT INTO `goodsdetails` VALUES (11, '梦特娇 MONTAGUT 单肩包女真牛皮女士手提包大容量斜挎包包女七夕情人节礼物 送女友 米白色R7612376213', 'http://iwenwiki.com:3001/images/details/s11.jpg', '1318', 'http://iwenwiki.com:3001/images/details/d11.webp');
INSERT INTO `goodsdetails` VALUES (12, '南孚(NANFU)5号充电锂电池20粒 1.5V TENAVOLTS 适用于KTV无线麦克风 AA五号', 'http://iwenwiki.com:3001/images/details/s12.jpg', '550', 'http://iwenwiki.com:3001/images/details/d12.webp');
INSERT INTO `goodsdetails` VALUES (13, '爱奇艺 奇遇Dream Pro 8G+128G会员版 4K VR一体机 骁龙XR2 PC串流Steam游戏', 'http://iwenwiki.com:3001/images/details/s13.jpg', '2799', 'http://iwenwiki.com:3001/images/details/d13.webp');
INSERT INTO `goodsdetails` VALUES (14, 'ROYAL CANIN 皇家猫粮 I27 Indoor27室内成猫猫粮 通用粮 2kg', 'http://iwenwiki.com:3001/images/details/s14.jpg', '120', 'http://iwenwiki.com:3001/images/details/d14.webp');
COMMIT;
-- ----------------------------
-- Table structure for keywords
-- ----------------------------
DROP TABLE IF EXISTS `keywords`;
CREATE TABLE `keywords` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`content` varchar(255) DEFAULT NULL COMMENT 'content',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='newTable';
-- ----------------------------
-- Records of keywords
-- ----------------------------
BEGIN;
INSERT INTO `keywords` VALUES (1, '跑步机');
INSERT INTO `keywords` VALUES (2, '手机');
INSERT INTO `keywords` VALUES (3, '苹果电脑');
INSERT INTO `keywords` VALUES (4, '充电器');
INSERT INTO `keywords` VALUES (5, '乐高');
INSERT INTO `keywords` VALUES (6, '机械手表');
INSERT INTO `keywords` VALUES (7, '机械键盘');
INSERT INTO `keywords` VALUES (8, '平凡的世界');
COMMIT;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`openid` text,
`session_key` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='newTable';
-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (1, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'QZqCIwdWrk6UG+apAPSV/Q==');
INSERT INTO `user` VALUES (2, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'YPbMi2kwwdXPIyEw68y4zg==');
INSERT INTO `user` VALUES (3, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'dr461UIbREfx6LD80nb0oA==');
INSERT INTO `user` VALUES (4, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'dr461UIbREfx6LD80nb0oA==');
INSERT INTO `user` VALUES (5, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'QKzNWmv7OpMxjKv/57iktQ==');
INSERT INTO `user` VALUES (6, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'UiPj5/Gz54GbaX5Dkbhv3A==');
INSERT INTO `user` VALUES (7, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'IvMMaCBqQcBPpb+HATzsQQ==');
INSERT INTO `user` VALUES (8, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'HhZRMgBY6Vwmu/XuGmrRWQ==');
INSERT INTO `user` VALUES (9, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'vbBeQTCn2QudMLcpBlBjyQ==');
INSERT INTO `user` VALUES (10, 'ou1Gm5Kd_WPyu6G9IWYCV-GoSNiU', 'D70GiJImEhBxs4fo71kyHQ==');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,18 @@
const express = require("express");
const app = express();
const router = require("./router");
const bodyParser = require("body-parser");
const cors = require("cors");
// 解决跨域
app.use(cors());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static('public'));
app.use("/api",router);
app.listen(3001,() =>{
console.log("服务器运行在3001端口上");
})

@ -0,0 +1,852 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"requires": {
"mime-types": "2.1.32",
"negotiator": "0.6.2"
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"fast-deep-equal": "3.1.3",
"fast-json-stable-stringify": "2.1.0",
"json-schema-traverse": "0.4.1",
"uri-js": "4.4.1"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": {
"safer-buffer": "2.1.2"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
"tweetnacl": "0.14.5"
}
},
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "1.0.4",
"debug": "2.6.9",
"depd": "1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "1.6.18"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"requires": {
"inherits": "2.0.4",
"safe-buffer": "5.2.1"
}
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "1.0.0"
}
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"create-hash": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"requires": {
"cipher-base": "1.0.4",
"inherits": "2.0.4",
"md5.js": "1.3.5",
"ripemd160": "2.0.2",
"sha.js": "2.4.11"
}
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "1.0.0"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
"jsbn": "0.1.1",
"safer-buffer": "2.1.2"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "1.1.2",
"encodeurl": "1.0.2",
"escape-html": "1.0.3",
"etag": "1.8.1",
"finalhandler": "1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "1.1.2",
"on-finished": "2.3.0",
"parseurl": "1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "2.0.7",
"qs": "6.7.0",
"range-parser": "1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "1.5.0",
"type-is": "1.6.18",
"utils-merge": "1.0.1",
"vary": "1.1.2"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "1.0.2",
"escape-html": "1.0.3",
"on-finished": "2.3.0",
"parseurl": "1.3.3",
"statuses": "1.5.0",
"unpipe": "1.0.0"
}
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "0.4.0",
"combined-stream": "1.0.8",
"mime-types": "2.1.32"
}
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "1.0.0"
}
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"requires": {
"ajv": "6.12.6",
"har-schema": "2.0.0"
}
},
"hash-base": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
"integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
"requires": {
"inherits": "2.0.4",
"readable-stream": "3.6.0",
"safe-buffer": "5.2.1"
}
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"requires": {
"depd": "1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": "1.5.0",
"toidentifier": "1.0.0"
},
"dependencies": {
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "1.0.0",
"jsprim": "1.4.1",
"sshpk": "1.16.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": "2.1.2"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"requires": {
"hash-base": "3.1.0",
"inherits": "2.0.4",
"safe-buffer": "5.2.1"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.49.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
"integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
},
"mime-types": {
"version": "2.1.32",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
"integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
"requires": {
"mime-db": "1.49.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"requires": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
"dependencies": {
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "1.0.3",
"inherits": "2.0.4",
"isarray": "1.0.0",
"process-nextick-args": "2.0.1",
"safe-buffer": "5.1.2",
"string_decoder": "1.1.1",
"util-deprecate": "1.0.2"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "5.1.2"
}
}
}
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "2.0.4",
"string_decoder": "1.3.0",
"util-deprecate": "1.0.2"
}
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"requires": {
"aws-sign2": "0.7.0",
"aws4": "1.11.0",
"caseless": "0.12.0",
"combined-stream": "1.0.8",
"extend": "3.0.2",
"forever-agent": "0.6.1",
"form-data": "2.3.3",
"har-validator": "5.1.5",
"http-signature": "1.2.0",
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
"mime-types": "2.1.32",
"oauth-sign": "0.9.0",
"performance-now": "2.1.0",
"qs": "6.5.2",
"safe-buffer": "5.2.1",
"tough-cookie": "2.5.0",
"tunnel-agent": "0.6.0",
"uuid": "3.4.0"
},
"dependencies": {
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}
}
},
"ripemd160": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"requires": {
"hash-base": "3.1.0",
"inherits": "2.0.4"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"requires": {
"debug": "2.6.9",
"depd": "1.1.2",
"destroy": "1.0.4",
"encodeurl": "1.0.2",
"escape-html": "1.0.3",
"etag": "1.8.1",
"fresh": "0.5.2",
"http-errors": "1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "2.3.0",
"range-parser": "1.2.1",
"statuses": "1.5.0"
},
"dependencies": {
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"requires": {
"encodeurl": "1.0.2",
"escape-html": "1.0.3",
"parseurl": "1.3.3",
"send": "0.17.1"
}
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"sha.js": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"requires": {
"inherits": "2.0.4",
"safe-buffer": "5.2.1"
}
},
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"requires": {
"asn1": "0.2.4",
"assert-plus": "1.0.0",
"bcrypt-pbkdf": "1.0.2",
"dashdash": "1.14.1",
"ecc-jsbn": "0.1.2",
"getpass": "0.1.7",
"jsbn": "0.1.1",
"safer-buffer": "2.1.2",
"tweetnacl": "0.14.5"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"requires": {
"safe-buffer": "5.2.1"
}
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"requires": {
"psl": "1.8.0",
"punycode": "2.1.1"
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "5.2.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "2.1.32"
}
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"requires": {
"punycode": "2.1.1"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
"assert-plus": "1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "1.3.0"
},
"dependencies": {
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
}
}
}
}
}

@ -0,0 +1,9 @@
{
"dependencies": {
"cors": "^2.8.5",
"create-hash": "^1.2.0",
"express": "^4.17.1",
"mysql": "^2.18.1",
"request": "^2.88.2"
}
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -0,0 +1,277 @@
const express = require("express");
const router = express.Router();
const SQLConnect = require("./SQLConnect.js");
const url = require("url");
const request = require("request");
const authorization_code = "itbaizhan"
const appid = "wxe4135ba344b525f4"
const secret = "a3e4a228cf68dbd055f63487352b582b"
/**
* banner接口地址
*/
router.get("/banner", (req, res) => {
const sql = "select * from banner";
SQLConnect(sql, [], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: {
result: result
}
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
})
/**
* 推荐商品
*/
router.get("/goods", (req, res) => {
var page = url.parse(req.url, true).query.page || 1;
const sql = "select * from goods limit 10 offset " + (page - 1) * 10;
SQLConnect(sql, [page], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: {
result: result
}
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
})
/**
* 搜索模糊查询
*/
router.get("/goods/search", (req, res) => {
var search = url.parse(req.url, true).query.search;
const sql = "select * from goods where title like '%" + search + "%'";
SQLConnect(sql, null, (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: result
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
});
/**
* search keywords
*/
router.get("/keywords", (req, res) => {
const sql = "select * from keywords";
SQLConnect(sql, [], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: {
result: result
}
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
})
/**
* goodsdetails
*/
router.get("/goods/details", (req, res) => {
var id = url.parse(req.url, true).query.id;
const sql = "select * from goodsdetails where id=?";
SQLConnect(sql, [id], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: result
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
});
/**
* 加入购物车
*/
router.get("/cart/add", (req, res) => {
var title = url.parse(req.url, true).query.title;
var price = url.parse(req.url, true).query.price;
var image = url.parse(req.url, true).query.image;
var currentID = url.parse(req.url, true).query.currentID;
const sql = "insert into cart values (null,?,?,?,?)";
SQLConnect(sql, [title, image, price, currentID], (result) => {
if (result.affectedRows > 0) {
res.send({
status: 200,
success: true,
msg: "添加成功"
})
} else {
res.status(500).send({
status: 500,
msg: "添加失败"
});
}
})
});
/**
* 购物车
*/
router.get("/cart", (req, res) => {
const sql = "select * from cart";
SQLConnect(sql, [], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: result
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
});
/**
* 删除购物车
*/
router.get("/cart/del", (req, res) => {
var id = url.parse(req.url, true).query.currentID;
const sql = "DELETE FROM cart WHERE id=?";
SQLConnect(sql, [id], (result) => {
if (result.affectedRows > 0) {
res.send({
status: 200,
success: true
})
} else {
res.status(500).send({
msg: "删除失败"
});
}
})
});
/**
* 购买商品查询
*/
router.get("/buy", (req, res) => {
var id = url.parse(req.url, true).query.id;
const sql = "select * from goods where id=?";
SQLConnect(sql, [id], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: result
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
});
/**
* 类别
*/
router.get("/category", (req, res) => {
var tag = url.parse(req.url, true).query.tag;
const sql = "select * from category where cate=?";
SQLConnect(sql, [tag], (result) => {
if (result.length > 0) {
res.send({
status: 200,
data: result
});
} else {
res.send({
status: 500,
msg: "暂无数据"
});
}
})
});
/**
* 登录
*/
router.post("/login", (req, res) => {
const { code } = req.body;
request(`https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=${authorization_code}`, (err, response, body) => {
if (err) console.log(err);
const data = JSON.parse(body);
/**
* 签名校验以及数据加解密涉及用户的会话密钥session_key 需要保存在服务器
* openid 判断是否是同一个用户
* session_key 判断用户是否失效
* data: {
* openid: '**********',
* session_key: '********'
* }
*/
const sql = "insert into user values (null,?,?)"
if(data.openid && data.session_key){
SQLConnect(sql, [data.openid,data.session_key], (result) => {
if (result.affectedRows > 0) {
res.send({
status: 200,
data: data.session_key,
msg: "添加成功"
})
} else {
res.status(500).send({
status: 500,
msg: "添加失败"
});
}
})
}else{
res.send({
status:500,
msg:"登录失败"
})
}
})
})
module.exports = router;

@ -0,0 +1,6 @@
module.exports = {
mp:{
appId:'wxb7a25f9efff604ac',
appSecret:'ac9fa0d2b9acd78405fd9a372c6f30d3'
}
}

@ -0,0 +1,31 @@
/*
* Eslint config file
* Documentation: https://eslint.org/docs/user-guide/configuring/
* Install the Eslint extension before using this feature.
*/
module.exports = {
env: {
es6: true,
browser: true,
node: true,
},
ecmaFeatures: {
modules: true,
},
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
globals: {
wx: true,
App: true,
Page: true,
getCurrentPages: true,
getApp: true,
Component: true,
requirePlugin: true,
requireMiniProgram: true,
},
// extends: 'eslint:recommended',
rules: {},
}

@ -0,0 +1,17 @@
/**
* 存储接口地址
*/
module.exports = {
baseUrl:"http://iwenwiki.com:3001", // 公共地址
banner:"/api/banner", // 轮播图
goods:"/api/goods", // 商品列表
hotSearch:"/api/keywords", // 热门搜索
search:"/api/goods/search", // 搜索
goodsDetails:"/api/goods/details", // 商品详情
cart:"/api/cart", // 购物车查询
addCart:"/api/cart/add", // 添加购物车
delCart:"/api/cart/del", // 删除购物车
category:"/api/category", // 分类
buy:"/api/buy", // 购买
login:"/api/login", // 登录
}

@ -0,0 +1,94 @@
const { request } = require("../utils/request.js")
const { login,baseUrl,banner,goods,hotSearch,search,goodsDetails,cart,addCart,delCart,category,buy } = require("./base")
/**
* 网络请求方法
*/
/**
* get banner data
*/
function getBanner(data){
return request(baseUrl + banner,"GET",data)
}
/**
* get goods list data
*/
function getGoods(data){
return request(baseUrl + goods,"GET",data)
}
/**
* hot search keywords
*/
function getHotSearch(data){
return request(baseUrl + hotSearch,"GET",data)
}
/**
* search
*/
function getSearch(data){
return request(baseUrl + search,"GET",data)
}
/**
* goods details
*/
function getGoodsDetails(data){
return request(baseUrl + goodsDetails,"GET",data)
}
/**
* cart select
*/
function getCart(data){
return request(baseUrl + cart,"GET",data)
}
/**
* cart add
*/
function addGoodsCart(data){
return request(baseUrl + addCart,"GET",data)
}
/**
* cart del
*/
function delGoodsCart(data){
return request(baseUrl + delCart,"GET",data)
}
/**
* category
*/
function getCategory(data){
return request(baseUrl + category,"GET",data)
}
/**
* buy
*/
function getBuy(data){
return request(baseUrl + buy,"GET",data)
}
function getLogin(data){
return request(baseUrl + login,"POST",data)
}
module.exports = {
getBanner,
getGoods,
getHotSearch,
getSearch,
getGoodsDetails,
getCart,
addGoodsCart,
delGoodsCart,
getCategory,
getBuy,
getLogin
}

@ -0,0 +1,19 @@
// app.js
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
},
globalData: {
userInfo: null
}
})

@ -0,0 +1,50 @@
{
"pages":[
"pages/index/index",
"pages/category/category",
"pages/cart/cart",
"pages/user/user",
"pages/search/search",
"pages/goods/goods",
"pages/details/details",
"pages/buy/buy"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "让你飞起来",
"navigationBarTextStyle":"black"
},
"sitemapLocation": "sitemap.json",
"lazyCodeLoading": "requiredComponents",
"tabBar": {
"color": "#666",
"selectedColor": "#fa2c19",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "./images/shouye.png",
"selectedIconPath": "./images/shouye_select.png"
},
{
"pagePath": "pages/category/category",
"text": "分类",
"iconPath": "./images/fenlei.png",
"selectedIconPath": "./images/fenlei_select.png"
},
{
"pagePath": "pages/cart/cart",
"text": "购物车",
"iconPath": "./images/31gouwuche.png",
"selectedIconPath": "./images/31gouwuche_select.png"
},
{
"pagePath": "pages/user/user",
"text": "用户",
"iconPath": "./images/yonghuguanli_huaban.png",
"selectedIconPath": "./images/yonghuguanli_huaban_select.png"
}
]
}
}

@ -0,0 +1,3 @@
page{
background-color: #f1f1f1;
}

@ -0,0 +1,26 @@
// components/goods-list/goods-list.js
Component({
/**
* 组件的属性列表
*/
properties: {
goodsData:{
type:Array,
value:[]
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

@ -0,0 +1,15 @@
<view class="list">
<view class="item" wx:for="{{ goodsData }}" wx:key="index">
<navigator url="/pages/details/details?id={{ item.id }}">
<view class="goods_img">
<image mode="widthFix" src="{{ item.url }}"></image>
</view>
<view class="goods_info">
<text class="goods_name">{{ item.title }}</text>
<view class="goods_price">
¥<text>{{ item.price }}</text>.00
</view>
</view>
</navigator>
</view>
</view>

@ -0,0 +1,44 @@
.list {
width: 100%;
padding: 5px;
box-sizing: border-box;
}
.list .item {
width: 48%;
padding: 5px;
box-sizing: border-box;
float: left;
background: #fff;
margin: 2px 1%;
}
.list .item .goods_img image {
width: 100%;
}
.list .item .goods_info .goods_name {
font-size: 14px;
text-align: left;
line-height: 1.05rem;
height: 2.1rem;
font-family: -apple-system, Helvetica, sans-serif;
overflow: hidden;
color: #434343;
text-overflow: ellipsis;
display: -webkit-box;
word-break: break-all;
}
.list .item .goods_info .goods_price {
font-style: normal;
font-family: JDZH-Regular, sans-serif;
display: inline-block;
font-size: 0.7rem;
line-height: 1.5rem;
color: #ff4142;
}
.list .item .goods_info .goods_price text{
font-size: 1rem;
}

@ -0,0 +1,41 @@
Component({
/**
* 组件的属性列表
*/
properties: {
indicatorDots:{
type:Boolean,
value:false
},
autoplay:{
type:Boolean,
value:false
},
interval:{
type:Number,
value:5000
},
duration:{
type:Number,
value:500
},
swiperData:{
type:Array,
value:[]
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

@ -0,0 +1,9 @@
<view class="swiper">
<swiper class="myswiper" indicator-dots="{{ indicatorDots }}" autoplay="{{ autoplay }}" interval="{{ interval }}" duration="{{ duration }}" indicator-color="#fff" indicator-active-color="#fa2c19">
<block wx:for="{{ swiperData }}" wx:key="index">
<swiper-item>
<image mode="widthFix" src="{{ item.url }}"></image>
</swiper-item>
</block>
</swiper>
</view>

@ -0,0 +1,6 @@
.swiper{
padding: 0 10px;
}
image{
width: 100%;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

@ -0,0 +1,235 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var component_1 = require("../common/component");
var shared_1 = require("../picker/shared");
var utils_1 = require("../common/utils");
var EMPTY_CODE = '000000';
(0, component_1.VantComponent)({
classes: ['active-class', 'toolbar-class', 'column-class'],
props: __assign(__assign({}, shared_1.pickerProps), { showToolbar: {
type: Boolean,
value: true,
}, value: {
type: String,
observer: function (value) {
this.code = value;
this.setValues();
},
}, areaList: {
type: Object,
value: {},
observer: 'setValues',
}, columnsNum: {
type: null,
value: 3,
}, columnsPlaceholder: {
type: Array,
observer: function (val) {
this.setData({
typeToColumnsPlaceholder: {
province: val[0] || '',
city: val[1] || '',
county: val[2] || '',
},
});
},
} }),
data: {
columns: [{ values: [] }, { values: [] }, { values: [] }],
typeToColumnsPlaceholder: {},
},
mounted: function () {
var _this = this;
(0, utils_1.requestAnimationFrame)(function () {
_this.setValues();
});
},
methods: {
getPicker: function () {
if (this.picker == null) {
this.picker = this.selectComponent('.van-area__picker');
}
return this.picker;
},
onCancel: function (event) {
this.emit('cancel', event.detail);
},
onConfirm: function (event) {
var index = event.detail.index;
var value = event.detail.value;
value = this.parseValues(value);
this.emit('confirm', { value: value, index: index });
},
emit: function (type, detail) {
detail.values = detail.value;
delete detail.value;
this.$emit(type, detail);
},
parseValues: function (values) {
var columnsPlaceholder = this.data.columnsPlaceholder;
return values.map(function (value, index) {
if (value &&
(!value.code || value.name === columnsPlaceholder[index])) {
return __assign(__assign({}, value), { code: '', name: '' });
}
return value;
});
},
onChange: function (event) {
var _this = this;
var _a;
var _b = event.detail, index = _b.index, picker = _b.picker, value = _b.value;
this.code = value[index].code;
(_a = this.setValues()) === null || _a === void 0 ? void 0 : _a.then(function () {
_this.$emit('change', {
picker: picker,
values: _this.parseValues(picker.getValues()),
index: index,
});
});
},
getConfig: function (type) {
var areaList = this.data.areaList;
return (areaList && areaList["".concat(type, "_list")]) || {};
},
getList: function (type, code) {
if (type !== 'province' && !code) {
return [];
}
var typeToColumnsPlaceholder = this.data.typeToColumnsPlaceholder;
var list = this.getConfig(type);
var result = Object.keys(list).map(function (code) { return ({
code: code,
name: list[code],
}); });
if (code != null) {
// oversea code
if (code[0] === '9' && type === 'city') {
code = '9';
}
result = result.filter(function (item) { return item.code.indexOf(code) === 0; });
}
if (typeToColumnsPlaceholder[type] && result.length) {
// set columns placeholder
var codeFill = type === 'province'
? ''
: type === 'city'
? EMPTY_CODE.slice(2, 4)
: EMPTY_CODE.slice(4, 6);
result.unshift({
code: "".concat(code).concat(codeFill),
name: typeToColumnsPlaceholder[type],
});
}
return result;
},
getIndex: function (type, code) {
var compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
var list = this.getList(type, code.slice(0, compareNum - 2));
// oversea code
if (code[0] === '9' && type === 'province') {
compareNum = 1;
}
code = code.slice(0, compareNum);
for (var i = 0; i < list.length; i++) {
if (list[i].code.slice(0, compareNum) === code) {
return i;
}
}
return 0;
},
setValues: function () {
var picker = this.getPicker();
if (!picker) {
return;
}
var code = this.code || this.getDefaultCode();
var provinceList = this.getList('province');
var cityList = this.getList('city', code.slice(0, 2));
var stack = [];
var indexes = [];
var columnsNum = this.data.columnsNum;
if (columnsNum >= 1) {
stack.push(picker.setColumnValues(0, provinceList, false));
indexes.push(this.getIndex('province', code));
}
if (columnsNum >= 2) {
stack.push(picker.setColumnValues(1, cityList, false));
indexes.push(this.getIndex('city', code));
if (cityList.length && code.slice(2, 4) === '00') {
code = cityList[0].code;
}
}
if (columnsNum === 3) {
stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
indexes.push(this.getIndex('county', code));
}
return Promise.all(stack)
.catch(function () { })
.then(function () { return picker.setIndexes(indexes); })
.catch(function () { });
},
getDefaultCode: function () {
var columnsPlaceholder = this.data.columnsPlaceholder;
if (columnsPlaceholder.length) {
return EMPTY_CODE;
}
var countyCodes = Object.keys(this.getConfig('county'));
if (countyCodes[0]) {
return countyCodes[0];
}
var cityCodes = Object.keys(this.getConfig('city'));
if (cityCodes[0]) {
return cityCodes[0];
}
return '';
},
getValues: function () {
var picker = this.getPicker();
if (!picker) {
return [];
}
return this.parseValues(picker.getValues().filter(function (value) { return !!value; }));
},
getDetail: function () {
var values = this.getValues();
var area = {
code: '',
country: '',
province: '',
city: '',
county: '',
};
if (!values.length) {
return area;
}
var names = values.map(function (item) { return item.name; });
area.code = values[values.length - 1].code;
if (area.code[0] === '9') {
area.country = names[1] || '';
area.province = names[2] || '';
}
else {
area.province = names[0] || '';
area.city = names[1] || '';
area.county = names[2] || '';
}
return area;
},
reset: function (code) {
this.code = code || '';
return this.setValues();
},
},
});

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"van-picker": "../picker/index"
}
}

@ -0,0 +1,20 @@
<wxs src="./index.wxs" module="computed" />
<van-picker
class="van-area__picker"
active-class="active-class"
toolbar-class="toolbar-class"
column-class="column-class"
show-toolbar="{{ showToolbar }}"
value-key="name"
title="{{ title }}"
loading="{{ loading }}"
columns="{{ computed.displayColumns(columns, columnsNum) }}"
item-height="{{ itemHeight }}"
visible-item-count="{{ visibleItemCount }}"
cancel-button-text="{{ cancelButtonText }}"
confirm-button-text="{{ confirmButtonText }}"
bind:change="onChange"
bind:confirm="onConfirm"
bind:cancel="onCancel"
/>

@ -0,0 +1,8 @@
/* eslint-disable */
function displayColumns(columns, columnsNum) {
return columns.slice(0, +columnsNum);
}
module.exports = {
displayColumns: displayColumns,
};

@ -0,0 +1,67 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var component_1 = require("../common/component");
var button_1 = require("../mixins/button");
var version_1 = require("../common/version");
var mixins = [button_1.button];
if ((0, version_1.canIUseFormFieldButton)()) {
mixins.push('wx://form-field-button');
}
(0, component_1.VantComponent)({
mixins: mixins,
classes: ['hover-class', 'loading-class'],
data: {
baseStyle: '',
},
props: {
formType: String,
icon: String,
classPrefix: {
type: String,
value: 'van-icon',
},
plain: Boolean,
block: Boolean,
round: Boolean,
square: Boolean,
loading: Boolean,
hairline: Boolean,
disabled: Boolean,
loadingText: String,
customStyle: String,
loadingType: {
type: String,
value: 'circular',
},
type: {
type: String,
value: 'default',
},
dataset: null,
size: {
type: String,
value: 'normal',
},
loadingSize: {
type: String,
value: '20px',
},
color: String,
},
methods: {
onClick: function (event) {
var _this = this;
this.$emit('click', event);
var _a = this.data, canIUseGetUserProfile = _a.canIUseGetUserProfile, openType = _a.openType, getUserProfileDesc = _a.getUserProfileDesc, lang = _a.lang;
if (openType === 'getUserInfo' && canIUseGetUserProfile) {
wx.getUserProfile({
desc: getUserProfileDesc || ' ',
lang: lang || 'en',
complete: function (userProfile) {
_this.$emit('getuserinfo', userProfile);
},
});
}
},
},
});

@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index",
"van-loading": "../loading/index"
}
}

@ -0,0 +1,54 @@
<wxs src="../wxs/utils.wxs" module="utils" />
<wxs src="./index.wxs" module="computed" />
<button
id="{{ id }}"
data-detail="{{ dataset }}"
class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}"
hover-class="van-button--active hover-class"
lang="{{ lang }}"
form-type="{{ formType }}"
style="{{ computed.rootStyle({ plain, color, customStyle }) }}"
open-type="{{ disabled || loading || (canIUseGetUserProfile && openType === 'getUserInfo') ? '' : openType }}"
business-id="{{ businessId }}"
session-from="{{ sessionFrom }}"
send-message-title="{{ sendMessageTitle }}"
send-message-path="{{ sendMessagePath }}"
send-message-img="{{ sendMessageImg }}"
show-message-card="{{ showMessageCard }}"
app-parameter="{{ appParameter }}"
aria-label="{{ ariaLabel }}"
bindtap="{{ disabled || loading ? '' : 'onClick' }}"
bindgetuserinfo="onGetUserInfo"
bindcontact="onContact"
bindgetphonenumber="onGetPhoneNumber"
binderror="onError"
bindlaunchapp="onLaunchApp"
bindopensetting="onOpenSetting"
bindchooseavatar="onChooseAvatar"
>
<block wx:if="{{ loading }}">
<van-loading
custom-class="loading-class"
size="{{ loadingSize }}"
type="{{ loadingType }}"
color="{{ computed.loadingColor({ type, color, plain }) }}"
/>
<view wx:if="{{ loadingText }}" class="van-button__loading-text">
{{ loadingText }}
</view>
</block>
<block wx:else>
<van-icon
wx:if="{{ icon }}"
size="1.2em"
name="{{ icon }}"
class-prefix="{{ classPrefix }}"
class="van-button__icon"
custom-style="line-height: inherit;"
/>
<view class="van-button__text">
<slot />
</view>
</block>
</button>

@ -0,0 +1,39 @@
/* eslint-disable */
var style = require('../wxs/style.wxs');
function rootStyle(data) {
if (!data.color) {
return data.customStyle;
}
var properties = {
color: data.plain ? data.color : '#fff',
background: data.plain ? null : data.color,
};
// hide border when color is linear-gradient
if (data.color.indexOf('gradient') !== -1) {
properties.border = 0;
} else {
properties['border-color'] = data.color;
}
return style([properties, data.customStyle]);
}
function loadingColor(data) {
if (data.plain) {
return data.color ? data.color : '#c9c9c9';
}
if (data.type === 'default') {
return '#c9c9c9';
}
return '#fff';
}
module.exports = {
rootStyle: rootStyle,
loadingColor: loadingColor,
};

@ -0,0 +1 @@
@import '../common/index.wxss';.van-button{-webkit-text-size-adjust:100%;align-items:center;-webkit-appearance:none;border-radius:var(--button-border-radius,2px);box-sizing:border-box;display:inline-flex;font-size:var(--button-default-font-size,16px);height:var(--button-default-height,44px);justify-content:center;line-height:var(--button-line-height,20px);padding:0;position:relative;text-align:center;transition:opacity .2s;vertical-align:middle}.van-button:before{background-color:#000;border:inherit;border-color:#000;border-radius:inherit;content:" ";height:100%;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{background:var(--button-default-background-color,#fff);border:var(--button-border-width,1px) solid var(--button-default-border-color,#ebedf0);color:var(--button-default-color,#323233)}.van-button--primary{background:var(--button-primary-background-color,#07c160);border:var(--button-border-width,1px) solid var(--button-primary-border-color,#07c160);color:var(--button-primary-color,#fff)}.van-button--info{background:var(--button-info-background-color,#1989fa);border:var(--button-border-width,1px) solid var(--button-info-border-color,#1989fa);color:var(--button-info-color,#fff)}.van-button--danger{background:var(--button-danger-background-color,#ee0a24);border:var(--button-border-width,1px) solid var(--button-danger-border-color,#ee0a24);color:var(--button-danger-color,#fff)}.van-button--warning{background:var(--button-warning-background-color,#ff976a);border:var(--button-border-width,1px) solid var(--button-warning-border-color,#ff976a);color:var(--button-warning-color,#fff)}.van-button--plain{background:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:var(--button-warning-background-color,#ff976a)}.van-button--large{height:var(--button-large-height,50px);width:100%}.van-button--normal{font-size:var(--button-normal-font-size,14px);padding:0 15px}.van-button--small{font-size:var(--button-small-font-size,12px);height:var(--button-small-height,30px);min-width:var(--button-small-min-width,60px);padding:0 var(--padding-xs,8px)}.van-button--mini{display:inline-block;font-size:var(--button-mini-font-size,10px);height:var(--button-mini-height,22px);min-width:var(--button-mini-min-width,50px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:flex;width:100%}.van-button--round{border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{line-height:inherit!important;min-width:1em;vertical-align:top}.van-button--hairline{border-width:0;padding-top:1px}.van-button--hairline:after{border-color:inherit;border-radius:calc(var(--button-border-radius, 2px)*2);border-width:1px}.van-button--hairline.van-button--round:after{border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save