From f0302de899b504ff110c11db591a23612b5d6c75 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E6=85=A2=E6=85=A2?= <994797151@qq.com>
Date: Fri, 21 May 2021 15:02:18 +0800
Subject: [PATCH] =?UTF-8?q?[=E6=9C=AC=E6=97=B6=E7=94=9F=E6=B4=BB=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F-=E7=BA=BF=E4=B8=8A=E5=A4=87=E4=BB=BD]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 14 +
.vscode/settings.json | 3 +
api/err.js | 54 +++
api/index.js | 29 ++
api/interfaces/address.js | 39 ++
api/interfaces/enroll.js | 18 +
api/interfaces/exchange.js | 21 +
api/interfaces/index.js | 93 ++++
api/interfaces/user.js | 70 +++
api/request.js | 65 +++
api/updateToken.js | 17 +
app.js | 70 +++
app.json | 62 +++
app.wxss | 96 ++++
pages/account/account.js | 83 ++++
pages/account/account.json | 6 +
pages/account/account.wxml | 57 +++
pages/account/account.wxss | 155 +++++++
pages/activate/activate.js | 70 +++
pages/activate/activate.json | 4 +
pages/activate/activate.wxml | 29 ++
pages/activate/activate.wxss | 129 ++++++
pages/activity/activity.js | 53 +++
pages/activity/activity.json | 4 +
pages/activity/activity.wxml | 7 +
pages/activity/activity.wxss | 36 ++
pages/activityData/activityData.js | 138 ++++++
pages/activityData/activityData.json | 6 +
pages/activityData/activityData.wxml | 115 +++++
pages/activityData/activityData.wxss | 427 +++++++++++++++++
pages/activityInfo/activityInfo.js | 183 ++++++++
pages/activityInfo/activityInfo.json | 4 +
pages/activityInfo/activityInfo.wxml | 134 ++++++
pages/activityInfo/activityInfo.wxss | 575 +++++++++++++++++++++++
pages/activityOrder/activityOrder.js | 146 ++++++
pages/activityOrder/activityOrder.json | 5 +
pages/activityOrder/activityOrder.wxml | 66 +++
pages/activityOrder/activityOrder.wxss | 228 ++++++++++
pages/address/address.js | 102 +++++
pages/address/address.json | 4 +
pages/address/address.wxml | 40 ++
pages/address/address.wxss | 112 +++++
pages/address_form/address_form.js | 240 ++++++++++
pages/address_form/address_form.json | 3 +
pages/address_form/address_form.wxml | 71 +++
pages/address_form/address_form.wxss | 148 ++++++
pages/chooseTel/chooseTel.js | 151 ++++++
pages/chooseTel/chooseTel.json | 4 +
pages/chooseTel/chooseTel.wxml | 26 ++
pages/chooseTel/chooseTel.wxss | 75 +++
pages/classify/classify.js | 84 ++++
pages/classify/classify.json | 6 +
pages/classify/classify.wxml | 70 +++
pages/classify/classify.wxss | 319 +++++++++++++
pages/coupon/coupon.js | 96 ++++
pages/coupon/coupon.json | 4 +
pages/coupon/coupon.wxml | 71 +++
pages/coupon/coupon.wxss | 247 ++++++++++
pages/couponArr/couponArr.js | 78 ++++
pages/couponArr/couponArr.json | 4 +
pages/couponArr/couponArr.wxml | 65 +++
pages/couponArr/couponArr.wxss | 173 +++++++
pages/couponDetails/couponDetails.js | 170 +++++++
pages/couponDetails/couponDetails.json | 4 +
pages/couponDetails/couponDetails.wxml | 97 ++++
pages/couponDetails/couponDetails.wxss | 215 +++++++++
pages/frozen/frozen.js | 40 ++
pages/frozen/frozen.json | 4 +
pages/frozen/frozen.wxml | 28 ++
pages/frozen/frozen.wxss | 101 +++++
pages/index/index.js | 240 ++++++++++
pages/index/index.json | 10 +
pages/index/index.skeleton.wxml | 95 ++++
pages/index/index.skeleton.wxss | 94 ++++
pages/index/index.wxml | 142 ++++++
pages/index/index.wxss | 544 ++++++++++++++++++++++
pages/login/login.js | 124 +++++
pages/login/login.json | 6 +
pages/login/login.wxml | 5 +
pages/login/login.wxss | 36 ++
pages/order/order.js | 149 ++++++
pages/order/order.json | 4 +
pages/order/order.wxml | 70 +++
pages/order/order.wxss | 241 ++++++++++
pages/orderData/orderData.js | 134 ++++++
pages/orderData/orderData.json | 3 +
pages/orderData/orderData.wxml | 63 +++
pages/orderData/orderData.wxss | 241 ++++++++++
pages/packet/packet.js | 140 ++++++
pages/packet/packet.json | 4 +
pages/packet/packet.wxml | 44 ++
pages/packet/packet.wxss | 223 +++++++++
pages/rights/rights.js | 327 +++++++++++++
pages/rights/rights.json | 6 +
pages/rights/rights.wxml | 204 +++++++++
pages/rights/rights.wxss | 606 +++++++++++++++++++++++++
pages/store/store.js | 213 +++++++++
pages/store/store.json | 4 +
pages/store/store.wxml | 64 +++
pages/store/store.wxss | 136 ++++++
pages/storeDetails/storeDetails.js | 62 +++
pages/storeDetails/storeDetails.json | 4 +
pages/storeDetails/storeDetails.wxml | 37 ++
pages/storeDetails/storeDetails.wxss | 102 +++++
pages/switchcity/switchcity.js | 180 ++++++++
pages/switchcity/switchcity.json | 4 +
pages/switchcity/switchcity.wxml | 66 +++
pages/switchcity/switchcity.wxss | 399 ++++++++++++++++
pages/user/user.js | 174 +++++++
pages/user/user.json | 4 +
pages/user/user.wxml | 171 +++++++
pages/user/user.wxss | 228 ++++++++++
pages/webView/webView.js | 68 +++
pages/webView/webView.json | 3 +
pages/webView/webView.wxml | 1 +
pages/webView/webView.wxss | 1 +
pages/welfare/welfare.js | 127 ++++++
pages/welfare/welfare.json | 5 +
pages/welfare/welfare.wxml | 88 ++++
pages/welfare/welfare.wxss | 567 +++++++++++++++++++++++
project.config.json | 135 ++++++
project.private.config.json | 96 ++++
sitemap.json | 7 +
static/icon/Check.png | Bin 0 -> 352 bytes
static/icon/Point_icon.png | Bin 0 -> 644 bytes
static/icon/activity_icon.png | Bin 0 -> 403 bytes
static/icon/add.png | Bin 0 -> 198 bytes
static/icon/address_icon.png | Bin 0 -> 873 bytes
static/icon/arrow_down.png | Bin 0 -> 279 bytes
static/icon/arrow_left.png | Bin 0 -> 380 bytes
static/icon/arrow_right.png | Bin 0 -> 408 bytes
static/icon/arrow_right_black.png | Bin 0 -> 405 bytes
static/icon/arrow_tips.png | Bin 0 -> 711 bytes
static/icon/choice.png | Bin 0 -> 232 bytes
static/icon/indexSite.png | Bin 0 -> 734 bytes
static/icon/integra_icon00.png | Bin 0 -> 508 bytes
static/icon/integra_icon01.png | Bin 0 -> 439 bytes
static/icon/location.png | Bin 0 -> 569 bytes
static/icon/news_icon.png | Bin 0 -> 622 bytes
static/icon/notice_icon.png | Bin 0 -> 428 bytes
static/icon/order_icon_00.png | Bin 0 -> 702 bytes
static/icon/order_icon_01.png | Bin 0 -> 714 bytes
static/icon/order_icon_02.png | Bin 0 -> 1033 bytes
static/icon/refresh_loding.gif | Bin 0 -> 1787 bytes
static/icon/rightsArrow.png | Bin 0 -> 217 bytes
static/icon/secrch_icon.png | Bin 0 -> 1009 bytes
static/icon/select.png | Bin 0 -> 781 bytes
static/icon/select_avtive.png | Bin 0 -> 404 bytes
static/icon/site_icon.png | Bin 0 -> 708 bytes
static/icon/storeArrow.png | Bin 0 -> 252 bytes
static/icon/switch.png | Bin 0 -> 312 bytes
static/icon/tel.png | Bin 0 -> 820 bytes
static/icon/time_icon.png | Bin 0 -> 612 bytes
static/img/activate-back.jpg | Bin 0 -> 38035 bytes
static/img/activity_coupon.png | Bin 0 -> 7105 bytes
static/img/address_back.png | Bin 0 -> 314 bytes
static/img/arrow.png | Bin 0 -> 201 bytes
static/img/card_img.png | Bin 0 -> 19780 bytes
static/img/card_top.png | Bin 0 -> 1553 bytes
static/img/class_back_01.png | Bin 0 -> 7461 bytes
static/img/coupon_icon_00.png | Bin 0 -> 6999 bytes
static/img/coupon_icon_01.png | Bin 0 -> 6890 bytes
static/img/coupon_img.png | Bin 0 -> 2358 bytes
static/img/coupon_tips.png | Bin 0 -> 9269 bytes
static/img/coupon_tips_00.png | Bin 0 -> 4942 bytes
static/img/coupon_tips_01.png | Bin 0 -> 4897 bytes
static/img/default_cover.png | Bin 0 -> 922 bytes
static/img/frozen_time.png | Bin 0 -> 993 bytes
static/img/gift_box.png | Bin 0 -> 287 bytes
static/img/grant_icon.png | Bin 0 -> 1201 bytes
static/img/legal_tips.png | Bin 0 -> 29502 bytes
static/img/location_img.jpg | Bin 0 -> 3230 bytes
static/img/login_img.png | Bin 0 -> 202990 bytes
static/img/null_icon.png | Bin 0 -> 2023 bytes
static/img/packet.png | Bin 0 -> 111112 bytes
static/img/packetText_icon.png | Bin 0 -> 444 bytes
static/img/packetText_top.png | Bin 0 -> 65967 bytes
static/img/packet_arr.png | Bin 0 -> 1460 bytes
static/img/packet_title.png | Bin 0 -> 15429 bytes
static/img/pointMore-up.png | Bin 0 -> 1692 bytes
static/img/pointMore.png | Bin 0 -> 1721 bytes
static/img/receive.png | Bin 0 -> 66699 bytes
static/img/refresh_loding.gif | Bin 0 -> 1787 bytes
static/img/rights_back_02.png | Bin 0 -> 1486 bytes
static/img/rights_top.png | Bin 0 -> 350197 bytes
static/img/staff_null.png | Bin 0 -> 1824 bytes
static/img/tel_img.png | Bin 0 -> 12680 bytes
static/img/userCoupon.png | Bin 0 -> 500 bytes
static/img/userOrder_00.png | Bin 0 -> 405 bytes
static/img/userOrder_01.png | Bin 0 -> 1094 bytes
static/img/userOrder_02.png | Bin 0 -> 889 bytes
static/img/userOrder_03.png | Bin 0 -> 439 bytes
static/img/userOrder_04.png | Bin 0 -> 15822 bytes
static/img/userOrder_05.png | Bin 0 -> 16216 bytes
static/img/userOrder_06.png | Bin 0 -> 1528 bytes
static/img/userSite.png | Bin 0 -> 443 bytes
static/img/user_card_00.png | Bin 0 -> 23889 bytes
static/img/user_card_01.png | Bin 0 -> 23642 bytes
static/img/user_card_02.png | Bin 0 -> 98964 bytes
static/img/welfare_back.png | Bin 0 -> 30332 bytes
static/tabBarIcon/00.png | Bin 0 -> 533 bytes
static/tabBarIcon/00_active.png | Bin 0 -> 744 bytes
static/tabBarIcon/01.png | Bin 0 -> 572 bytes
static/tabBarIcon/01_active.png | Bin 0 -> 501 bytes
utils/qqmap-wx-jssdk.min.js | 1 +
utils/util.js | 19 +
206 files changed, 12884 insertions(+)
create mode 100644 .gitignore
create mode 100644 .vscode/settings.json
create mode 100644 api/err.js
create mode 100644 api/index.js
create mode 100644 api/interfaces/address.js
create mode 100644 api/interfaces/enroll.js
create mode 100644 api/interfaces/exchange.js
create mode 100644 api/interfaces/index.js
create mode 100644 api/interfaces/user.js
create mode 100644 api/request.js
create mode 100644 api/updateToken.js
create mode 100644 app.js
create mode 100644 app.json
create mode 100644 app.wxss
create mode 100644 pages/account/account.js
create mode 100644 pages/account/account.json
create mode 100644 pages/account/account.wxml
create mode 100644 pages/account/account.wxss
create mode 100644 pages/activate/activate.js
create mode 100644 pages/activate/activate.json
create mode 100644 pages/activate/activate.wxml
create mode 100644 pages/activate/activate.wxss
create mode 100644 pages/activity/activity.js
create mode 100644 pages/activity/activity.json
create mode 100644 pages/activity/activity.wxml
create mode 100644 pages/activity/activity.wxss
create mode 100644 pages/activityData/activityData.js
create mode 100644 pages/activityData/activityData.json
create mode 100644 pages/activityData/activityData.wxml
create mode 100644 pages/activityData/activityData.wxss
create mode 100644 pages/activityInfo/activityInfo.js
create mode 100644 pages/activityInfo/activityInfo.json
create mode 100644 pages/activityInfo/activityInfo.wxml
create mode 100644 pages/activityInfo/activityInfo.wxss
create mode 100644 pages/activityOrder/activityOrder.js
create mode 100644 pages/activityOrder/activityOrder.json
create mode 100644 pages/activityOrder/activityOrder.wxml
create mode 100644 pages/activityOrder/activityOrder.wxss
create mode 100644 pages/address/address.js
create mode 100644 pages/address/address.json
create mode 100644 pages/address/address.wxml
create mode 100644 pages/address/address.wxss
create mode 100644 pages/address_form/address_form.js
create mode 100644 pages/address_form/address_form.json
create mode 100644 pages/address_form/address_form.wxml
create mode 100644 pages/address_form/address_form.wxss
create mode 100644 pages/chooseTel/chooseTel.js
create mode 100644 pages/chooseTel/chooseTel.json
create mode 100644 pages/chooseTel/chooseTel.wxml
create mode 100644 pages/chooseTel/chooseTel.wxss
create mode 100644 pages/classify/classify.js
create mode 100644 pages/classify/classify.json
create mode 100644 pages/classify/classify.wxml
create mode 100644 pages/classify/classify.wxss
create mode 100644 pages/coupon/coupon.js
create mode 100644 pages/coupon/coupon.json
create mode 100644 pages/coupon/coupon.wxml
create mode 100644 pages/coupon/coupon.wxss
create mode 100644 pages/couponArr/couponArr.js
create mode 100644 pages/couponArr/couponArr.json
create mode 100644 pages/couponArr/couponArr.wxml
create mode 100644 pages/couponArr/couponArr.wxss
create mode 100644 pages/couponDetails/couponDetails.js
create mode 100644 pages/couponDetails/couponDetails.json
create mode 100644 pages/couponDetails/couponDetails.wxml
create mode 100644 pages/couponDetails/couponDetails.wxss
create mode 100644 pages/frozen/frozen.js
create mode 100644 pages/frozen/frozen.json
create mode 100644 pages/frozen/frozen.wxml
create mode 100644 pages/frozen/frozen.wxss
create mode 100644 pages/index/index.js
create mode 100644 pages/index/index.json
create mode 100644 pages/index/index.skeleton.wxml
create mode 100644 pages/index/index.skeleton.wxss
create mode 100644 pages/index/index.wxml
create mode 100644 pages/index/index.wxss
create mode 100644 pages/login/login.js
create mode 100644 pages/login/login.json
create mode 100644 pages/login/login.wxml
create mode 100644 pages/login/login.wxss
create mode 100644 pages/order/order.js
create mode 100644 pages/order/order.json
create mode 100644 pages/order/order.wxml
create mode 100644 pages/order/order.wxss
create mode 100644 pages/orderData/orderData.js
create mode 100644 pages/orderData/orderData.json
create mode 100644 pages/orderData/orderData.wxml
create mode 100644 pages/orderData/orderData.wxss
create mode 100644 pages/packet/packet.js
create mode 100644 pages/packet/packet.json
create mode 100644 pages/packet/packet.wxml
create mode 100644 pages/packet/packet.wxss
create mode 100644 pages/rights/rights.js
create mode 100644 pages/rights/rights.json
create mode 100644 pages/rights/rights.wxml
create mode 100644 pages/rights/rights.wxss
create mode 100644 pages/store/store.js
create mode 100644 pages/store/store.json
create mode 100644 pages/store/store.wxml
create mode 100644 pages/store/store.wxss
create mode 100644 pages/storeDetails/storeDetails.js
create mode 100644 pages/storeDetails/storeDetails.json
create mode 100644 pages/storeDetails/storeDetails.wxml
create mode 100644 pages/storeDetails/storeDetails.wxss
create mode 100644 pages/switchcity/switchcity.js
create mode 100644 pages/switchcity/switchcity.json
create mode 100644 pages/switchcity/switchcity.wxml
create mode 100644 pages/switchcity/switchcity.wxss
create mode 100644 pages/user/user.js
create mode 100644 pages/user/user.json
create mode 100644 pages/user/user.wxml
create mode 100644 pages/user/user.wxss
create mode 100644 pages/webView/webView.js
create mode 100644 pages/webView/webView.json
create mode 100644 pages/webView/webView.wxml
create mode 100644 pages/webView/webView.wxss
create mode 100644 pages/welfare/welfare.js
create mode 100644 pages/welfare/welfare.json
create mode 100644 pages/welfare/welfare.wxml
create mode 100644 pages/welfare/welfare.wxss
create mode 100644 project.config.json
create mode 100644 project.private.config.json
create mode 100644 sitemap.json
create mode 100644 static/icon/Check.png
create mode 100644 static/icon/Point_icon.png
create mode 100644 static/icon/activity_icon.png
create mode 100644 static/icon/add.png
create mode 100644 static/icon/address_icon.png
create mode 100644 static/icon/arrow_down.png
create mode 100644 static/icon/arrow_left.png
create mode 100644 static/icon/arrow_right.png
create mode 100644 static/icon/arrow_right_black.png
create mode 100644 static/icon/arrow_tips.png
create mode 100644 static/icon/choice.png
create mode 100644 static/icon/indexSite.png
create mode 100644 static/icon/integra_icon00.png
create mode 100644 static/icon/integra_icon01.png
create mode 100644 static/icon/location.png
create mode 100644 static/icon/news_icon.png
create mode 100644 static/icon/notice_icon.png
create mode 100644 static/icon/order_icon_00.png
create mode 100644 static/icon/order_icon_01.png
create mode 100644 static/icon/order_icon_02.png
create mode 100644 static/icon/refresh_loding.gif
create mode 100644 static/icon/rightsArrow.png
create mode 100644 static/icon/secrch_icon.png
create mode 100644 static/icon/select.png
create mode 100644 static/icon/select_avtive.png
create mode 100644 static/icon/site_icon.png
create mode 100644 static/icon/storeArrow.png
create mode 100644 static/icon/switch.png
create mode 100644 static/icon/tel.png
create mode 100644 static/icon/time_icon.png
create mode 100644 static/img/activate-back.jpg
create mode 100644 static/img/activity_coupon.png
create mode 100644 static/img/address_back.png
create mode 100644 static/img/arrow.png
create mode 100644 static/img/card_img.png
create mode 100644 static/img/card_top.png
create mode 100644 static/img/class_back_01.png
create mode 100644 static/img/coupon_icon_00.png
create mode 100644 static/img/coupon_icon_01.png
create mode 100644 static/img/coupon_img.png
create mode 100644 static/img/coupon_tips.png
create mode 100644 static/img/coupon_tips_00.png
create mode 100644 static/img/coupon_tips_01.png
create mode 100644 static/img/default_cover.png
create mode 100644 static/img/frozen_time.png
create mode 100644 static/img/gift_box.png
create mode 100644 static/img/grant_icon.png
create mode 100644 static/img/legal_tips.png
create mode 100644 static/img/location_img.jpg
create mode 100644 static/img/login_img.png
create mode 100644 static/img/null_icon.png
create mode 100644 static/img/packet.png
create mode 100644 static/img/packetText_icon.png
create mode 100644 static/img/packetText_top.png
create mode 100644 static/img/packet_arr.png
create mode 100644 static/img/packet_title.png
create mode 100644 static/img/pointMore-up.png
create mode 100644 static/img/pointMore.png
create mode 100644 static/img/receive.png
create mode 100644 static/img/refresh_loding.gif
create mode 100644 static/img/rights_back_02.png
create mode 100644 static/img/rights_top.png
create mode 100644 static/img/staff_null.png
create mode 100644 static/img/tel_img.png
create mode 100644 static/img/userCoupon.png
create mode 100644 static/img/userOrder_00.png
create mode 100644 static/img/userOrder_01.png
create mode 100644 static/img/userOrder_02.png
create mode 100644 static/img/userOrder_03.png
create mode 100644 static/img/userOrder_04.png
create mode 100644 static/img/userOrder_05.png
create mode 100644 static/img/userOrder_06.png
create mode 100644 static/img/userSite.png
create mode 100644 static/img/user_card_00.png
create mode 100644 static/img/user_card_01.png
create mode 100644 static/img/user_card_02.png
create mode 100644 static/img/welfare_back.png
create mode 100644 static/tabBarIcon/00.png
create mode 100644 static/tabBarIcon/00_active.png
create mode 100644 static/tabBarIcon/01.png
create mode 100644 static/tabBarIcon/01_active.png
create mode 100644 utils/qqmap-wx-jssdk.min.js
create mode 100644 utils/util.js
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..14ea590
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..3b66410
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "git.ignoreLimitWarning": true
+}
\ No newline at end of file
diff --git a/api/err.js b/api/err.js
new file mode 100644
index 0000000..cee8984
--- /dev/null
+++ b/api/err.js
@@ -0,0 +1,54 @@
+
+/**
+ * 处理错误信息
+ * @property {Object} errInfo
+ */
+
+const errInfo = (obj) =>{
+ if(obj.status_code == 401){
+ wx.showModal({
+ title : "登录提示",
+ content : "长时间未操作,登录已过期,请重新登录",
+ showCancel : false,
+ confirmColor: "#0b0041",
+ confirmText : "确定",
+ success : ()=>{
+ // 清理客户端登录缓存
+ wx.removeStorageSync("token")
+ // 返回首页
+ wx.redirectTo({
+ url: "/pages/index/index",
+ })
+ }
+ })
+ }else if(obj.status_code == 422){
+ wx.showToast({
+ title: obj.message,
+ icon : "none"
+ })
+ }else if(obj.status_code == 400 || obj.status_code == 0){
+ wx.showToast({
+ title: obj.message,
+ icon : "none"
+ })
+ }else if(obj.status_code == 404){
+ wx.showToast({
+ title: "接口地址不存在,请联系系统管理员",
+ icon : "none"
+ })
+ }else if(obj.status_code == 500){
+ wx.showToast({
+ title: "服务端:" + obj.message,
+ icon : "none"
+ })
+ }else {
+ wx.showToast({
+ title: "code:" + obj.status_code + ", msg:" + obj.message,
+ icon : "none"
+ })
+ }
+}
+
+module.exports = {
+ errInfo
+}
diff --git a/api/index.js b/api/index.js
new file mode 100644
index 0000000..094cfe5
--- /dev/null
+++ b/api/index.js
@@ -0,0 +1,29 @@
+
+/*
+ * 亿时代 v1.0.0 (2020-07-02 09:25:32)
+ *https://card.ysd-bs.com/api/
+ */
+
+// 首页
+import index from "./interfaces/index"
+
+// 授权登录
+import enroll from "./interfaces/enroll"
+
+// 个人中心
+import user from "./interfaces/user"
+
+// 地址管理
+import address from "./interfaces/address"
+
+// 兑换订单
+import exchange from "./interfaces/exchange"
+
+
+export default{
+ index,
+ enroll,
+ user,
+ address,
+ exchange
+}
diff --git a/api/interfaces/address.js b/api/interfaces/address.js
new file mode 100644
index 0000000..93a8e76
--- /dev/null
+++ b/api/interfaces/address.js
@@ -0,0 +1,39 @@
+
+import {req} from "../request"
+
+//我的地址列表
+const index = () => req({url: "addresses"})
+
+//获取省
+const create = () => req({url: "addresses/create"})
+
+// 获取市级列表
+const children = (psn) => req({url: "areas/children", data: {psn: psn}})
+
+// 获取已有地址信息
+const edit = (addressId) => req({url: "addresses/" + addressId + '/edit'})
+
+
+// 创建地址保存
+const add = (name, mobile, province_id, city_id, district_id, address, def) => req({url: "addresses/store", method: "POST", data: {name: name, mobile: mobile, province_id: province_id, city_id: city_id, district_id: district_id, address: address, def: def}})
+
+// 编辑地址保存
+const keep = (addressId,name, mobile, province_id, city_id, district_id, address) => req({url: "addresses/" + addressId + '/update', method: "POST", data: {name: name, mobile: mobile, province_id: province_id, city_id: city_id, district_id: district_id, address: address}})
+
+// 设为默认地址
+const setdef = (addressId) => req({url: "addresses/" + addressId + '/setdef', method: "POST"})
+
+// 删除地址
+const remove = (addressId) => req({url: "addresses/" + addressId + '/destroy', method: "DELETE"})
+
+
+export default({
+ index,
+ create,
+ children,
+ edit,
+ add,
+ keep,
+ setdef,
+ remove
+})
diff --git a/api/interfaces/enroll.js b/api/interfaces/enroll.js
new file mode 100644
index 0000000..0805d56
--- /dev/null
+++ b/api/interfaces/enroll.js
@@ -0,0 +1,18 @@
+
+import {req} from "../request"
+
+//微信授权登录
+const record = (code, iv, encryptedData) => req({url: "auth/openwx", method: "POST", data: {code: code, iv: iv, encryptedData: encryptedData}})
+
+//微信手机授权
+const bindmobile = (code, iv, mobile) => req({url: "auth/bindmobile", method: "POST", data: {code: code, iv: iv, mobile: mobile}})
+
+//切换手机授权
+const tel = (wechatUser_id, username) => req({url: "auth/loginbymobile", method: "POST", data: {wechatUser_id: wechatUser_id,username: username}})
+
+
+export default({
+ record,
+ bindmobile,
+ tel
+})
diff --git a/api/interfaces/exchange.js b/api/interfaces/exchange.js
new file mode 100644
index 0000000..e390db9
--- /dev/null
+++ b/api/interfaces/exchange.js
@@ -0,0 +1,21 @@
+
+import {req} from "../request"
+
+//兑换订单列表
+const index = (type) => req({url: "orders/index", data: {type: type}})
+
+//兑换订单详情
+const show = (orderid) => req({url: "orders/show?", data: {orderid: orderid}})
+
+//取消兑换订单
+const cancel = (orderid) => req({url: "orders/cancel?orderid=" + orderid , method: "POST"})
+
+//兑换订单支付
+const payments = (orderid) => req({url: "payments/order?orderid=" + orderid})
+
+export default({
+ index,
+ show,
+ cancel,
+ payments
+})
diff --git a/api/interfaces/index.js b/api/interfaces/index.js
new file mode 100644
index 0000000..1130c89
--- /dev/null
+++ b/api/interfaces/index.js
@@ -0,0 +1,93 @@
+
+import {req} from "../request"
+
+//首页权益
+const index = (area_name, user_lng, user_lat) => req({url: "home", data: {area_name: area_name, user_lng: user_lng, user_lat:user_lat}})
+
+//白金+钻石权益
+const choice = (type, area_name, user_lng, user_lat) => req({url: "home/group", data: {type: type,area_name: area_name, user_lng: user_lng, user_lat:user_lat}})
+
+//权益分类
+const classify = (category_id) => req({url: "categories/" + category_id})
+
+//周五福利详情
+const welfares = (welfare_id) => req({url: "welfare/" + welfare_id})
+
+//市区选择
+const idxCity = (province_id) => req({url: "areas/citys?province_id=" + province_id || ''})
+
+//活动商品列表
+const redwine = () => req({url: "redwine/index"})
+
+//活动商品详情
+const redwinePay = (goodId) => req({url: "redwine/" + goodId + "/pay", method: "POST"})
+
+//活动商品订单提交
+const payment = (good_id, param_id, address_id, islogistics) => req({url: "redwine/payment", method: "POST", data: {good_id: good_id, param_id: param_id, address_id: address_id, islogistics: islogistics}})
+
+//活动商品订单
+const activityOrder = (type, page) => req({url: "activity/orders", data: {type: type, page: page}})
+
+//活动商品取消订单
+const cance = (orderId) => req({url: "activity/orders/" + orderId + '/cancel', method: "POST"})
+
+//活动商品支付订单
+const repay = (orderId) => req({url: "redwine/" + orderId + '/repay', method: "POST"})
+
+//活动商品订单详情
+const ordersInfo = (orderId) => req({url: "activity/orders/" + orderId + '/info', method: "POST"})
+
+// 权益详情
+const rightShow = (right_id, address_id, num, is_deliver) => req({url: "orders/create/", data: {right_id: right_id, address_id: address_id || '', num: num || '', is_deliver: is_deliver}})
+
+// 权益购买提交
+const rightStore = (right_id, address_id, is_deliver, qty) => req({url: "orders/store/", method: "POST", data: {right_id: right_id, address_id: address_id || '', is_deliver: is_deliver, qty: qty || ''}})
+
+// 权益购买信息
+const wechat = (trade_no) => req({url: "payments/wechat?",method: "POST", data: {trade_no: trade_no}})
+
+//获取openid地址-web
+const unionpay = (callback_url, callback_type, right_id) => req({url: "unionpay/openid", data: {callback_url: callback_url, callback_type: callback_type, right_id: right_id}})
+
+//领取权益优惠券
+const receiveCode = (openid, event_no, right_id) => req({url: "unionpay/code", data: {openid: openid, event_no: event_no, right_id: right_id}})
+
+//领取权益优惠券
+const unionCode = (openid) => req({url: "unionpay/union_openid", data: {openid: openid}, method: "POST"})
+
+//所有城市-最新无字母
+const newCity = () => req({url: "ajax/all_right_citys"})
+
+//市区选择-最新无字母
+const newidxCity = (code) => req({url: "ajax/all_right_children", data: {code: code}})
+
+//周五福利-获取支付信息
+const fridayInfo = (orderId) => req({url: "welfare/order/" + orderId})
+
+//周五福利-支付
+const fridayPay = (trade_no) => req({url: "payments/welfare/wechat",method: "POST", data: {trade_no: trade_no}})
+
+export default({
+ index,
+ choice,
+ classify,
+ welfares,
+ idxCity,
+ redwine,
+ redwinePay,
+ payment,
+ activityOrder,
+ cance,
+ repay,
+ ordersInfo,
+ rightShow,
+ rightStore,
+ wechat,
+ unionpay,
+ receiveCode,
+ unionCode,
+ newCity,
+ newidxCity,
+ fridayInfo,
+ fridayPay
+})
diff --git a/api/interfaces/user.js b/api/interfaces/user.js
new file mode 100644
index 0000000..f14b067
--- /dev/null
+++ b/api/interfaces/user.js
@@ -0,0 +1,70 @@
+
+import {req} from "../request"
+
+//用户信息
+const index = () => req({url: "user"})
+
+//切换用户登录
+const mobiles = () => req({url: "user/mobiles"})
+
+//卡券
+const coupon = (status) => req({url: "coupons?status=" + status})
+
+//卡券分组
+const couponArr = (activityId, status, page) => req({url: "coupons/list", data:{activityId : activityId, status : status, page : page}})
+
+//卡券详情
+const couponinfo = (coupon_id, user_lng, user_lat) => req({url: "coupons/show", data:{coupon_id : coupon_id, user_lng : user_lng, user_lat : user_lat}})
+
+//卡券二维码
+const qrcode = (coupon_id) => req({url: "coupons/qrcode", data:{coupon_id : coupon_id}})
+
+//卡券二维码
+const barcode = (coupon_id) => req({url: "coupons/" + coupon_id + '/barcode'})
+
+//门店列表
+const stores = (coupon_id, province_id, city_id, district_id, title, user_lng, user_lat, page) => req({url: "coupons/new_stores", method: "POST", data:{coupon_id : coupon_id, province_id : province_id || '', city_id : city_id || '', district_id : district_id || '', title : title || '', user_lng : user_lng, user_lat : user_lat, page : page}})
+
+//门店详情
+const storesShow = (store_id, user_lng, user_lat) => req({url: "coupons/store/show", data:{store_id : store_id, user_lng : user_lng, user_lat : user_lat}})
+
+//省市区
+const areas = (psn) => req({url: "areas/children?psn=" + psn})
+
+// 加入微信卡包
+const jssdk = (coupon_id) => req({url: "coupons/jssdk?coupon_id=" + coupon_id})
+
+// 积分卡激活
+const cards = (code, pass) => req({url: "user/cards/activate", method: "POST", data:{code : code, pass : pass}})
+
+// 积分账变记录
+const logs = (type, page) => req({url: "account/logs", data:{type : type, page : page}})
+
+// 冻结列表
+const ungrants = (type,) => req({url: "account/ungrants", data:{type : type}})
+
+// 发送短信
+const send = (mobile, channel, type) => req({url: "sms/send", method: "POST", data:{mobile : mobile, channel : channel, type : type}})
+
+// 领取红包
+const unicom = (mobile, channel, code) => req({url: "unicom/get", method: "POST", data:{mobile : mobile, channel : channel, code : code}})
+
+
+export default({
+ index,
+ mobiles,
+ coupon,
+ couponArr,
+ couponinfo,
+ qrcode,
+ barcode,
+ stores,
+ storesShow,
+ areas,
+ jssdk,
+ cards,
+ logs,
+ ungrants,
+ send,
+ unicom
+})
diff --git a/api/request.js b/api/request.js
new file mode 100644
index 0000000..32f336c
--- /dev/null
+++ b/api/request.js
@@ -0,0 +1,65 @@
+import {errInfo} from './err'
+import {updToken} from './updateToken'
+
+// 请求方式配置
+const api = "https://card.ysd-bs.com/api/" //正式地址
+const header = {
+ "Accept" : "application/json"
+}
+
+/**
+ * 请求
+ * @property {Object} req
+ */
+
+const req = (obj) => {
+ // header
+ if(obj.token){
+ header.Authorization = obj.token || ''
+ } else {
+ header.Authorization = wx.getStorageSync("token") || ""
+ }
+
+ // 处理请求信息
+ return new Promise((resolve, reject) => {
+ // 组合header
+ obj.header = {
+ "Accept" : "application/json",
+ "Authorization" : wx.getStorageSync("token") || ""
+ }
+
+ wx.request({
+ url : api + obj.url,
+ header : obj.header || {},
+ method : obj.method || 'GET',
+ data : obj.data || {},
+ success : res => {
+ // 更新token
+ if (res.header.Authorization) updToken(res.header.Authorization)
+ // 处理信息
+ if (res.data.status_code == 200) {
+ resolve(res.data)
+ } else {
+ if (res.data.status_code == 401 || res.data.status_code == 400) {
+ reject({
+ login : false,
+ codeBeen: false
+ })
+ }
+ errInfo(res.data)
+ }
+ },
+ fail: err => {
+ wx.showToast({
+ title : err.errMsg,
+ icon : "none"
+ })
+ reject(err)
+ }
+ })
+ })
+}
+
+module.exports = {
+ req
+}
diff --git a/api/updateToken.js b/api/updateToken.js
new file mode 100644
index 0000000..8207d76
--- /dev/null
+++ b/api/updateToken.js
@@ -0,0 +1,17 @@
+
+/**
+ * 更新token
+ * @property {String} updToken
+ */
+
+const updToken = (token) =>{
+ // 更新全局存储器
+ getApp().globalData.token = token
+ // 更新客户端登录缓存
+ wx.setStorageSync('token', token)
+}
+
+module.exports = {
+ updToken
+}
+
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..b567e1d
--- /dev/null
+++ b/app.js
@@ -0,0 +1,70 @@
+
+/*
+ * 亿时代
+ */
+
+import api from "api/index"
+
+var QQMapWX = require('utils/qqmap-wx-jssdk.min.js');
+var qqmapsdk;
+
+App({
+ onLaunch() {
+ // 获取系统信息
+ this.globalData.statusBarHeight = wx.getSystemInfoSync().statusBarHeight
+
+ // 检查用户登录状态
+ const token = wx.getStorageSync("token")
+ if (token) {
+ this.globalData.isUser = true
+ }
+
+ this.qqmapsdk = new QQMapWX({
+ key: '4KYBZ-LCAKF-QWOJN-NIDNZ-FZHLZ-2XFW7'
+ })
+
+ // 版本更新提示
+ const updateManager = wx.getUpdateManager()
+
+ updateManager.onUpdateReady(function () {
+ wx.showModal({
+ title : "更新提示",
+ content : "新版本已经准备好,是否重启应用?",
+ confirmText : "重启",
+ cancelColor : "#555",
+ confirmColor: "#26589f",
+ success: res => {
+ if (res.confirm) {
+ updateManager.applyUpdate()
+ }
+ }
+ })
+ })
+
+
+ // 获取系统信息
+ wx.getSystemInfo({
+ success: res=>{
+ this.globalData.systInfo = {
+ statusBarHeight: res.statusBarHeight,
+ safeArea : res.safeArea
+ }
+ }
+ })
+ // 挂载api
+ wx.$api = api
+ },
+ globalData: {
+ isUser : false,
+ userInfo : null,
+ token : "",
+ statusBarHeight : 0,
+ userCurrent : 0,
+ wechatUser : '',
+ city : "",
+ atcity : "",
+ adcode : '',
+ longitude : '',
+ latitude : ''
+ }
+})
\ No newline at end of file
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..cc3e22a
--- /dev/null
+++ b/app.json
@@ -0,0 +1,62 @@
+{
+ "pages": [
+ "pages/index/index",
+ "pages/user/user",
+ "pages/coupon/coupon",
+ "pages/couponDetails/couponDetails",
+ "pages/store/store",
+ "pages/storeDetails/storeDetails",
+ "pages/chooseTel/chooseTel",
+ "pages/login/login",
+ "pages/couponArr/couponArr",
+ "pages/rights/rights",
+ "pages/activity/activity",
+ "pages/activityInfo/activityInfo",
+ "pages/address/address",
+ "pages/address_form/address_form",
+ "pages/activityOrder/activityOrder",
+ "pages/activityData/activityData",
+ "pages/order/order",
+ "pages/orderData/orderData",
+ "pages/activate/activate",
+ "pages/account/account",
+ "pages/switchcity/switchcity",
+ "pages/webView/webView",
+ "pages/packet/packet",
+ "pages/frozen/frozen",
+ "pages/welfare/welfare",
+ "pages/classify/classify"
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "亿时代",
+ "navigationBarTextStyle": "black"
+ },
+ "tabBar": {
+ "list": [
+ {
+ "pagePath": "pages/index/index",
+ "text": "首页",
+ "iconPath": "/static/tabBarIcon/00.png",
+ "selectedIconPath": "/static/tabBarIcon/00_active.png"
+ },
+ {
+ "pagePath": "pages/user/user",
+ "text": "我的",
+ "iconPath": "/static/tabBarIcon/01.png",
+ "selectedIconPath": "/static/tabBarIcon/01_active.png"
+ }
+ ],
+ "color": "#b6b9bb",
+ "selectedColor": "#000",
+ "borderStyle": "white"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json",
+ "permission": {
+ "scope.userLocation": {
+ "desc": "你的位置信息将用于小程序位置接口的效果展示"
+ }
+ }
+}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..00d27c0
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,96 @@
+/**app.wxss**/
+page {
+ background: #f7f7f7;
+}
+
+/* 下边框 */
+.uni-border-top,
+.uni-border-bottom {
+ position: relative;
+}
+
+.uni-border-top::after,
+.uni-border-bottom::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #f3f3f3;
+}
+
+.uni-border-top::after {
+ top: 0;
+}
+
+.uni-border-bottom::after {
+ bottom: 0;
+}
+
+/*
+ * 文字截取
+ */
+
+.nowrap {
+ max-width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.nowrap-multi {
+ display: -webkit-box;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+/*
+ * 水平居中
+ */
+
+.pack-center {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-box-pack: center;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+}
+
+/*
+* 页面信息提醒
+*/
+
+.pages-hint {
+ text-align: center;
+ color: #747788;
+ font-size: 28rpx;
+ background: white;
+}
+
+.pages-hint image {
+ width: 188rpx;
+ height: 188rpx;
+}
+
+
+
+/* 上拉加载 */
+.pagesLoding{
+ text-align: center;
+ line-height: 90rpx;
+ color: gray;
+}
+
+.pagesLoding-icon{
+ width: 28rpx;
+ height: 28rpx;
+ vertical-align: middle;
+ margin-right: 10rpx;
+ margin-bottom: 3rpx;
+}
\ No newline at end of file
diff --git a/pages/account/account.js b/pages/account/account.js
new file mode 100644
index 0000000..0f66061
--- /dev/null
+++ b/pages/account/account.js
@@ -0,0 +1,83 @@
+// pages/account/account.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ type : '', //卡类型
+ number : '', //账户余额
+ accounts : '', //账户列表
+ blockeds : '', //待发放余额
+ page : {}, //分页信息
+ lodingStats : false, //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ type : options.type
+ })
+ },
+
+ onShow() {
+ // 获取账变记录
+ this.accountInfo();
+ },
+
+ /**
+ * 账变记录
+ */
+ accountInfo(page) {
+ wx.$api.user.logs(this.data.type, page).then(res=>{
+ //判断金卡、银卡、钻石卡
+ let number
+ if(this.data.type == "silver") {
+ number = res.data.account.silver
+ } else if(this.data.type == "gold") {
+ number = res.data.account.gold
+ } else if(this.data.type == "drill") {
+ number = res.data.account.drill
+ } else {
+ return
+ }
+
+ let listArr = this.data.accounts,
+ newData = []
+ if(page == 1 || page == undefined) listArr = []
+ newData = listArr.concat(res.data.data)
+
+ this.setData({
+ number : number,
+ blockeds : res.data.blockeds,
+ accounts : newData,
+ page : res.data.page
+ })
+ })
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+ // 获取账变记录
+ this.accountInfo();
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ // 获取账变记录
+ this.accountInfo(pageNumber);
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/account/account.json b/pages/account/account.json
new file mode 100644
index 0000000..54ed85e
--- /dev/null
+++ b/pages/account/account.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "账变记录",
+ "navigationBarBackgroundColor": "#dfb48b",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/account/account.wxml b/pages/account/account.wxml
new file mode 100644
index 0000000..676387b
--- /dev/null
+++ b/pages/account/account.wxml
@@ -0,0 +1,57 @@
+
+
+
+ 白金账户余额
+
+ 钻石账户余额
+
+
+
+ 可用余额
+ {{number}}
+ 可用余额,入账记录
+
+
+ 待发放
+ {{blockeds}}
+ 立即查询
+
+
+
+
+
+ 入账记录
+
+
+
+ {{item.title}}
+
+
+ {{item.variable}}
+
+
+
+
+ 有效期:
+ {{item.created_at}} 至 {{item.expired_at}}
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+
+ 抱歉,目前暂无内容~
+
\ No newline at end of file
diff --git a/pages/account/account.wxss b/pages/account/account.wxss
new file mode 100644
index 0000000..d643194
--- /dev/null
+++ b/pages/account/account.wxss
@@ -0,0 +1,155 @@
+/* 积分 */
+.integra-cont-name {
+ padding: 40rpx 20rpx 10rpx;
+ font-weight: 600;
+}
+
+.integra-list {
+ background: #fff;
+ border-radius: 10rpx;
+ width: calc(100% - 40rpx);
+ margin: 20rpx;
+ box-sizing: border-box;
+}
+
+.integra-top {
+ padding: 30rpx 20rpx 0;
+ background-color: #dfb48b;
+ border-radius: 0 0 100rpx 100rpx;
+}
+
+.integra-name {
+ color: #fff;
+ font-size: 32rpx;
+ margin-bottom: 30rpx;
+}
+
+.integra-title {
+ margin-bottom: 20rpx;
+}
+
+.integra-number {
+ font-size: 40rpx;
+}
+
+.integra-btn {
+ font-size: 28rpx;
+ margin-top: 20rpx;
+ color: #adadad;
+ display: flex;
+}
+
+.integra-btn text {
+ color: #dfb48b;
+}
+
+.integra-btn image {
+ width: 36rpx;
+ height: 36rpx;
+ margin-top: 2rpx;
+}
+
+.integra-blue {
+ color: #317afa;
+}
+
+.integra-info {
+ background-color: #fff;
+ text-align: center;
+ border-radius: 20rpx;
+ display: flex;
+ box-shadow: 0 10rpx 10rpx rgba(0, 0, 0, .1);
+ padding: 30rpx 20rpx;
+ box-sizing: border-box;
+ text-align: left;
+}
+
+.integra-right {
+ flex: 2;
+ position: relative;
+}
+
+.integra-right::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ background-color: #eeeeee;
+ width: 2rpx;
+ height: 100%;
+}
+
+.integra-right:first-child {
+ padding-right: 20rpx;
+ box-sizing: border-box;
+}
+
+.integra-right:last-child {
+ padding-left: 30rpx;
+ box-sizing: border-box;
+}
+
+.integra-right:first-child::after {
+ display: none;
+}
+
+.integra-list {
+ padding: 30rpx 20rpx;
+ position: relative;
+ box-sizing: border-box;
+}
+
+.integra-list::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #eaeaea;
+}
+
+.integra-list:last-child::after {
+ display: none;
+}
+
+.integra-text {
+ display: flex;
+ margin-bottom: 20rpx;
+}
+
+.integra-title {
+ flex: 1;
+ font-size: 30rpx;
+ display: flex;
+}
+
+.integra-title text {
+ flex: 1;
+}
+
+.integra-title image {
+ width: 36rpx;
+ height: 36rpx;
+}
+
+.integra-oints {
+ color: #f0a479;
+}
+
+.integra-date {
+ display: flex;
+}
+
+.integra-time:last-child{
+ box-sizing: border-box;
+}
+
+.integra-time {
+ color: #999;
+ font-size: 28rpx;
+}
+
+.integra-time text {
+ color: #000;
+}
\ No newline at end of file
diff --git a/pages/activate/activate.js b/pages/activate/activate.js
new file mode 100644
index 0000000..c080a14
--- /dev/null
+++ b/pages/activate/activate.js
@@ -0,0 +1,70 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ carmi: '' //卡密
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ },
+
+ /**
+ * 卡激活
+ */
+ cardform(e) {
+ let code = e.detail.value.code,
+ pass = this.data.carmi
+
+ wx.$api.user.cards(code, pass).then(res=>{
+ if(res.data.type == "silver") {
+ app.globalData.userCurrent = 0
+ }else if(res.data.type == "gold") {
+ app.globalData.userCurrent = 1
+ }else if(res.data.type == "drill") {
+ app.globalData.userCurrent = 2
+ }else {
+ return
+ }
+
+ // 写入缓存
+ wx.setStorage({
+ key : 'current',
+ data : app.globalData.userCurrent
+ })
+
+ wx.showToast({
+ title: res.data.message,
+ icon : 'none'
+ })
+ setTimeout(()=>{
+ wx.switchTab({
+ url: '/pages/user/user'
+ })
+ },2000)
+ })
+ },
+
+ /**
+ * 获取卡密
+ */
+ carmiTab(e){
+ var number = e.detail.value
+ var change = number.replace(/(\d{4})(?=\d)/g, "$1-");//replace(/\s/g,'');
+ this.setData({
+ carmi: change
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/activate/activate.json b/pages/activate/activate.json
new file mode 100644
index 0000000..286a508
--- /dev/null
+++ b/pages/activate/activate.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "卡激活"
+}
\ No newline at end of file
diff --git a/pages/activate/activate.wxml b/pages/activate/activate.wxml
new file mode 100644
index 0000000..57ddcfd
--- /dev/null
+++ b/pages/activate/activate.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+ 消费红包【储值卡】
+
+
+ 温馨提示:
+
+ 尊敬的会员:储值后,将开启您,愉快的消费之旅!
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/activate/activate.wxss b/pages/activate/activate.wxss
new file mode 100644
index 0000000..157abdd
--- /dev/null
+++ b/pages/activate/activate.wxss
@@ -0,0 +1,129 @@
+/* 卡激活 */
+.activate-back {
+ width: 100%;
+ height: 100vh;
+ left: 0;
+ top: 0;
+ position: relative;
+}
+
+.activate-img {
+ position: relative;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+}
+
+.activate-cont {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: 60rpx;
+ width: 100%;
+ box-sizing: border-box;
+ z-index: 9;
+}
+
+.activate-title {
+ font-size: 60rpx;
+ font-weight: 600;
+ text-align: center;
+ margin: 20rpx 0 100rpx;
+}
+
+.activate-label, .activate-pass {
+ margin-bottom: 60rpx;
+}
+
+.activate-label label, .activate-pass label {
+ margin-bottom: 40rpx;
+ display: block;
+ font-weight: 600;
+ font-size: 34rpx;
+}
+
+.activate-label input, .activate-pass input {
+ background: rgba(255, 255, 255, .3);
+ border-radius: 60rpx;
+ height: 90rpx;
+ line-height: 90rpx;
+ padding: 0 1rem;
+ box-sizing: border-box;
+ box-shadow: inset -2px 2px 4px 1.5px rgba(0, 0, 0, 0.7);
+}
+
+.activate-label input {
+ width: 100%;
+}
+
+.activate-label text {
+ display: block;
+ font-size: 32rpx;
+ margin-top: 10rpx;
+ font-weight: normal;
+}
+
+.activate-entry {
+ display: flex;
+ line-height: 80rpx;
+ color: #fff;
+ font-weight: 600;
+}
+
+.activate-entry input {
+ background: #fff;
+ border-radius: 60rpx;
+ width: calc(25% - 1rem);
+ margin: 0 .5rem;
+ height: 80rpx;
+ line-height: 80rpx;
+}
+
+.activate-btn {
+ width: 100%;
+ height: 90rpx;
+ border: none;
+ margin: 2rem 0 2.2rem;
+}
+
+.activate-btn button {
+ width: 100% !important;
+ height: 100%;
+ line-height: 90rpx;
+ border-radius: 50rpx;
+ background: #000;
+ border: none;
+ font-size: 40rpx;
+ color: #fff;
+ margin: 0;
+ padding: 0;
+}
+
+.activate-tips {
+ color: #000;
+ font-weight: 600;
+ font-size: 32rpx;
+}
+
+.activate-tips-text {
+ line-height: 46rpx;
+ margin-top: 20rpx;
+}
+
+.activate-tips-img {
+ width: 240rpx;
+ height: 240rpx;
+ border-radius: 50%;
+ margin: 2rem auto 0;
+}
+
+.activate-tips-img image {
+ width: 100%;
+ height: 100%;
+}
+
+.activate-tips-text {
+ text-indent: 2rem;
+}
\ No newline at end of file
diff --git a/pages/activity/activity.js b/pages/activity/activity.js
new file mode 100644
index 0000000..997570f
--- /dev/null
+++ b/pages/activity/activity.js
@@ -0,0 +1,53 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ isUser : false, //用户登录状态
+ indexArr : '', //商品列表
+ page : '', //下一页
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ if(app.globalData.isUser){
+ this.setData({
+ isUser: app.globalData.isUser
+ })
+ }
+
+ wx.$api.index.redwine().then(res=>{
+ this.setData({
+ indexArr : res.data.data,
+ page : res.data.page
+ })
+ })
+ },
+
+ /**
+ * 处理未登录时的转跳
+ */
+ userNav(e){
+ let pageUrl = e.currentTarget.dataset.url
+ if(this.data.isUser){
+ wx.navigateTo({
+ url: pageUrl
+ })
+ }else{
+ // 去登录
+ wx.navigateTo({
+ url: "/pages/login/login?way=activity"
+ })
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/activity/activity.json b/pages/activity/activity.json
new file mode 100644
index 0000000..951f122
--- /dev/null
+++ b/pages/activity/activity.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "产品活动"
+}
\ No newline at end of file
diff --git a/pages/activity/activity.wxml b/pages/activity/activity.wxml
new file mode 100644
index 0000000..24137bd
--- /dev/null
+++ b/pages/activity/activity.wxml
@@ -0,0 +1,7 @@
+
+
+ 商品列表
+
+
+
+
\ No newline at end of file
diff --git a/pages/activity/activity.wxss b/pages/activity/activity.wxss
new file mode 100644
index 0000000..f9ea2f9
--- /dev/null
+++ b/pages/activity/activity.wxss
@@ -0,0 +1,36 @@
+/* 活动列表 */
+.activityTitle {
+ background: #000;
+ color: #fff;
+ border-radius: 40rpx 14rpx 14rpx 40rpx;
+ margin: 20rpx 24rpx 0;
+ padding: 10rpx;
+ width: 190rpx;
+ box-sizing: border-box;
+ display: flex;
+ font-size: 28rpx;
+}
+
+.activityTitle image {
+ width: 40rpx;
+ height: 40rpx;
+ margin-right: 5rpx;
+}
+
+.activityList {
+ width: calc(100% - 40rpx);
+ margin: 30rpx 20rpx;
+ box-sizing: border-box;
+ position: relative;
+ padding-top: 40%;
+}
+
+/* 5:2 */
+.activityList image {
+ border-radius: 10rpx;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/pages/activityData/activityData.js b/pages/activityData/activityData.js
new file mode 100644
index 0000000..517cd4c
--- /dev/null
+++ b/pages/activityData/activityData.js
@@ -0,0 +1,138 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ statusHeight : app.globalData.statusBarHeight,
+ order : '' //订单详情
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+
+ // 获取商品活动订单详情
+ this.orderInfo(options.id);
+ },
+
+ /**
+ * 商品活动订单详情
+ */
+ orderInfo(id) {
+ wx.$api.index.ordersInfo(id).then(res=>{
+ this.setData({
+ order : res.data
+ })
+ })
+ },
+
+ /**
+ * 取消订单
+ */
+ orderDelete(e) {
+ let orderId = e.currentTarget.dataset.id
+ wx.showModal({
+ title : '订单取消',
+ content : '确认取消吗?',
+ success : res=> {
+ if (res.confirm) {
+ wx.$api.index.cance(orderId).then(res=>{
+ wx.showToast({
+ title: res.data,
+ icon : 'none'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ },2000)
+ })
+ } else if (res.cancel) {
+ wx.showToast({
+ title : '取消',
+ icon : 'loading',
+ duration: 1000
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 订单支付
+ */
+ orderPay(e) {
+ let orderId = e.currentTarget.dataset.id
+
+ wx.login({
+ success: res=> {
+ wx.$api.index.repay(orderId).then(res=>{
+ let payInfo = JSON.parse(res.data.json)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ },2000)
+ }
+ },
+ fail : res=>{
+ wx.reLaunch({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ }
+ })
+ })
+ }
+ })
+ },
+
+ /**
+ * 返回上一页
+ */
+ orderRun() {
+ wx.navigateBack({
+ delta: 1
+ })
+ },
+
+ /**
+ * 复制快递单号
+ */
+ copyText (e) {
+ let text = e.currentTarget.dataset.text
+ wx.setClipboardData({
+ data : text,
+ success : res=> {
+ wx.getClipboardData({
+ success: res => {
+ wx.showToast({
+ title: '复制成功'
+ })
+ }
+ })
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/activityData/activityData.json b/pages/activityData/activityData.json
new file mode 100644
index 0000000..87ee6d0
--- /dev/null
+++ b/pages/activityData/activityData.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "订单详情",
+ "navigationBarBackgroundColor": "#f57e32",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/activityData/activityData.wxml b/pages/activityData/activityData.wxml
new file mode 100644
index 0000000..350576b
--- /dev/null
+++ b/pages/activityData/activityData.wxml
@@ -0,0 +1,115 @@
+
+
+ {{order.status_text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 收货人:{{order.address.name}}
+ {{order.address.mobile}}
+
+ {{order.address.province}}{{order.address.city}}{{order.address.district}}{{order.address.info}}
+
+
+
+
+
+
+
+ {{order.title}}
+ ¥{{order.param.price}}
+ ×{{order.param.number}}
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{item.amount}}
+
+
+ 超市券满减券
+
+ 赠
+
+
+ {{item.title}}
+
+ 卡数(张)
+ x {{item.number}}
+
+
+
+
+
+
+
+
+
+
+ 赠
+
+
+ {{item.title}}
+ {{item.subtitle}}
+ 原价:{{item.amount}}元
+
+ 活动:0.00元
+ x {{item.number}}
+
+
+
+
+
+
+
+ 订单号
+ {{order.order_id}}
+
+
+
+
+
+ 物流公司
+ {{order.ex_type_text}}
+
+
+
+
+ 快递单号
+ {{order.ex_no}}
+
+
+
+
+
+ 实际支付
+ ¥{{order.amount}}
+
+
+
+
\ No newline at end of file
diff --git a/pages/activityData/activityData.wxss b/pages/activityData/activityData.wxss
new file mode 100644
index 0000000..e50e247
--- /dev/null
+++ b/pages/activityData/activityData.wxss
@@ -0,0 +1,427 @@
+
+/*
+ * 亿时代
+ */
+ .order-statl{
+ background-color: #f57e32;
+ padding: 0 30rpx 10rpx;
+ color: white;
+ line-height: 90rpx;
+ height: 90rpx;
+ position: relative;
+}
+
+.order-statl-icon{
+ width: 80rpx;
+ height: 80rpx;
+ vertical-align: middle;
+ position: absolute;
+ right: 30rpx;
+ top: 5rpx;
+}
+
+ /* 收货人信息 */
+.order-address{
+ padding: 30rpx 30rpx 30rpx 100rpx;
+ position: relative;
+ background: white;
+}
+
+.order-address-back{
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ vertical-align:bottom;
+}
+
+.order-address-name{
+ padding-right: 300rpx;
+ position: relative;
+ font-size: 33rpx;
+ padding-bottom: 10rpx;
+}
+
+.order-address-name text{
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 280rpx;
+ text-align: right;
+}
+
+.order-address-text{
+ color: #464854;
+ font-size: 26rpx;
+}
+
+.address-icon,
+.arrows-right{
+ position: absolute;
+}
+
+.address-icon{
+ height: 42rpx;
+ width: 42rpx;
+ left: 30rpx;
+ top: calc(50% - 26rpx);
+ top: -webkit-calc(50% - 26rpx);
+}
+
+.arrows-right{
+ height: 28rpx;
+ width: 28rpx;
+ right: 30rpx;
+ top: calc(50% - 19rpx);
+ top: -webkit-calc(50% - 19rpx);
+}
+
+.order-add-address{
+ text-align: center;
+ padding: 30rpx 0;
+}
+
+.order-add-address navigator{
+ display: inline-block;
+ background: #e92344;
+ color: white;
+ line-height: 60rpx;
+ padding: 0 30rpx;
+ margin-right: 20rpx;
+}
+
+/* 订单商品 */
+
+.order-content{
+ border-bottom: solid 100rpx transparent;
+}
+
+.order-goods{
+ margin-bottom: 20rpx;
+}
+
+.goods-goods-mall{
+ padding: 20rpx 30rpx 0 30rpx;
+ line-height: 50rpx;
+}
+
+.goods-goods-mall image{
+ width: 48rpx;
+ height: 48rpx;
+ vertical-align: middle;
+ margin-right: 15rpx;
+ margin-bottom: 2rpx;
+}
+
+.goods-goods-li{
+ padding: 20rpx 30rpx;
+ position: relative;
+ border-bottom: solid 1rpx #f2f2f2;
+ min-height: 130rpx;
+ background: white;
+}
+
+.goods-goods-li:last-child{
+ border-bottom: none;
+}
+
+.goods-img{
+ position: absolute;
+ top: 20rpx;
+ left: 30rpx;
+ height: 130rpx;
+ width: 130rpx;
+ background: #f5f6fa;
+}
+
+.goods-body{
+ padding-left: 150rpx;
+}
+
+.goods-name{
+ font-weight: bold;
+ padding: 10rpx 0 20rpx;
+}
+
+.goods-price{
+ color: #e92344;
+}
+
+.goods-qty{
+ color: gray;
+ font-weight: normal;
+ padding-left: 10rpx;
+ font-size: 28rpx;
+}
+
+.goods-params{
+ color: gray;
+ padding-bottom: 20rpx;
+ font-size: 28rpx;
+}
+
+/* 统计信息 */
+
+.order-total{
+ background: white;
+ margin: 20rpx 0;
+}
+
+.order-total-li{
+ padding: 0 30rpx;
+ line-height: 90rpx;
+ position: relative;
+ font-size: 28rpx;
+}
+
+.order-total-li::before{
+ position: absolute;
+ content: " ";
+ left: 30rpx;
+ bottom: 0;
+ right: 0;
+ height: 1rpx;
+ background: #f2f2f2;
+}
+
+.order-total-li:last-child::before{
+ display: none;
+}
+
+.order-total-li text{
+ float: right;
+ color: #999;
+}
+
+.order-total-li .redCor {
+ color: #e92344;
+ font-size: 32rpx;
+}
+
+
+
+/* 购物券 */
+.goodsCoupon {
+ background: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.goodsCoupon-right {
+ width: calc(100% - 270rpx);
+ position: absolute;
+ left: 250rpx;
+ top: 20rpx;
+ right: 20rpx;
+}
+
+.goodsCoupon-text {
+ color: #999;
+ font-size: 26rpx;
+ margin-bottom: 24rpx;
+}
+
+.goodsCoupon-name {
+ margin-bottom: 40rpx;
+ font-size: 32rpx;
+}
+
+.goodsCoupon-name-box {
+ margin-bottom: 10rpx;
+}
+
+.goodsCoupon-sheet {
+ display: flex;
+ font-size: 28rpx;
+ color: #999;
+}
+
+.goodsCoupon-cost {
+ color: #000;
+ font-size: 28rpx;
+ margin: 14rpx 0;
+}
+
+.goodsCoupon-price {
+ font-size: 28rpx;
+ color: #f57e32;
+}
+
+.goodsCoupon-sheet view {
+ display: inline-block;
+ flex: 1;
+}
+
+.goodsCoupon-sheet text {
+ font-size: 24rpx;
+ line-height: 40rpx;
+ padding-right: 6rpx;
+}
+
+
+.goodsCoupon-left {
+ position: relative;
+ width: 200rpx;
+ height: 130rpx;
+}
+
+.goodsCoupon-box {
+ width: 200rpx;
+ height: 200rpx;
+}
+
+.goodsBox-img {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.goodsCoupon-img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.goodsCoupon-number {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ width: 100%;
+ text-align: center;
+ font-size: 40rpx;
+ color: #f57e32;
+ height: 94rpx;
+ line-height: 94rpx;
+ font-weight: 600;
+}
+
+.goodsCoupon-number text {
+ font-size: 28rpx;
+}
+
+.goodsCoupon-btn {
+ position: absolute;
+ right: 10rpx;
+ left: 10rpx;
+ bottom: 4rpx;
+ z-index: 2;
+ background: #f57e32;
+ color: #fff;
+ font-size: 24rpx;
+ width: calc(100% - 20rpx);
+ text-align: center;
+ height: 40rpx;
+ line-height: 40rpx;
+ border-radius: 30rpx;
+ transform: scale(0.83, 0.83);
+}
+
+.goodsCoupon-tips {
+ position: absolute;
+ top: -4rpx;
+ left: 10rpx;
+ z-index: 2;
+ color: #fff;
+ transform: rotate(-45deg);
+}
+
+.goodsCoupon-tips text {
+ transform: scale(0.83, 0.83);
+ font-size: 24rpx;
+ display: inline-block;
+}
+
+.goodsBox-tips {
+ display: inline-block;
+ width: 49rpx;
+ padding: 8rpx 0 6rpx 0;
+ background: #EDBA19;
+ top: -10rpx;
+ left: 10rpx;
+ position: absolute;
+ text-align: center;
+ border-top-left-radius: 4rpx;
+ font-size: 24rpx;
+ color: #ffff;
+ transform: scale(.9, .9);
+}
+
+.goodsBox-tips:before, .goodsBox-tips:after {
+ content: "";
+ position: absolute;
+}
+
+.goodsBox-tips:before {
+ height: 0;
+ width: 0;
+ border-bottom: 10rpx solid #745800;
+ border-right: 10rpx solid transparent;
+ right: -10rpx;
+ top: 0;
+}
+
+.goodsBox-tips:after {
+ height: 0;
+ width: 0;
+ border-left: 25rpx solid #EDBA19;
+ border-right: 25rpx solid #EDBA19;
+ border-bottom: 25rpx solid transparent;
+ bottom: -22rpx;
+ left: 0;
+}
+
+.goodsLabel {
+ background: #fff;
+ text-align: right;
+ padding: 20rpx;
+ font-size: 32rpx;
+}
+
+.goodsLabel text {
+ font-weight: 600;
+}
+
+
+/* 底部工具栏 */
+.order-data-footer{
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ border-top: solid 1rpx #f2f2f2;
+ padding-top: 17rpx;
+ padding-right: 30rpx;
+ padding-left: 30rpx;
+ height: 83rpx;
+ background: white;
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction:row-reverse;
+}
+
+.order-data-footer.iphoneX {
+ padding-bottom: 30rpx;
+}
+
+.order-btn{
+ margin-left: 20rpx;
+ height: 54rpx;
+ line-height: 50rpx;
+ box-sizing: border-box;
+ border:solid 1rpx #747788;
+ padding: 0 20rpx;
+ font-size: 26rpx;
+ border-radius: 40rpx;
+ margin-top: 10rpx;
+}
+
+.order-btn-back {
+ border-color: #f57e32;
+ color: #f57e32;
+}
\ No newline at end of file
diff --git a/pages/activityInfo/activityInfo.js b/pages/activityInfo/activityInfo.js
new file mode 100644
index 0000000..45cfc96
--- /dev/null
+++ b/pages/activityInfo/activityInfo.js
@@ -0,0 +1,183 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ isUser : false, //用户登录状态
+ indexId : '', //tab状态
+ indexArr : '', //商品列表
+ page : '', //下一页
+ address : '', //收货地址
+ goodId : '', //商品id
+ goodCont : '', //商品信息
+ params : '', //商品数量组
+ paramsIndex : 0,
+ platIndex : 0, //选择提交方式下标
+ platformCp :[ //选择提交数组
+ {
+ id : 0,
+ name : '快递'
+ },
+ {
+ id : 1,
+ name : '自提'
+ }
+ ],
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+
+ // this.setData({
+ // goodId: options.id
+ // })
+
+ if(app.globalData.isUser){
+ this.setData({
+ isUser: app.globalData.isUser
+ })
+ }
+
+ // 活动商品列表
+ wx.$api.index.redwine().then(res=>{
+ this.setData({
+ indexArr : res.data.data,
+ indexId : res.data.data[1].id,
+ page : res.data.page
+ })
+
+ // 获取商品信息
+ this.redwineInfo(res.data.data[1].id)
+ })
+ },
+
+ /**
+ * 商品信息
+ */
+ redwineInfo(id) {
+ wx.$api.index.redwinePay(id).then(res=>{
+ this.setData({
+ address : res.data.address,
+ goodCont : res.data.good,
+ params : res.data.params,
+ paramsIndex : res.data.params.findIndex(val => val.def == 1)
+ })
+ })
+ },
+
+ /**
+ * 商品数量选择
+ */
+ goodsNumber(e) {
+ let onType = e.currentTarget.dataset.type,
+ atIndex = this.data.paramsIndex
+ // atIndex = this.data.params.findIndex(val => val.number == this.data.qty)
+ if(onType == 'plus' && atIndex < this.data.params.length - 1){
+ atIndex++
+ }else if(onType == 'remove' && atIndex >= 1){
+ atIndex--
+ }else{
+ return
+ }
+ this.setData({
+ paramsIndex: atIndex
+ })
+ },
+
+ /**
+ * 选择提交方式
+ */
+ platBind(e) {
+ this.setData({
+ platIndex : e.detail.value
+ })
+ },
+
+ /**
+ * 订单提交
+ */
+ submitOrder() {
+ let good_id = this.data.indexId,
+ param_id = this.data.params[this.data.paramsIndex].id,
+ address_id = this.data.address.id,
+ islogistics = this.data.platIndex
+
+ wx.login({
+ success: res=> {
+ wx.$api.index.payment(good_id, param_id, address_id, islogistics).then(res=>{
+ let payInfo = JSON.parse(res.data.json)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ },2000)
+ }
+ },
+ fail : res=>{
+ wx.reLaunch({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ }
+ })
+ })
+ }
+ })
+ },
+
+ /**
+ * 选择tab
+ */
+ orderTab(e) {
+ let indexId = e.currentTarget.dataset.id
+ if (indexId != this.data.indexId) {
+ this.setData({
+ indexId : indexId
+ })
+ }
+ // 获取商品信息
+ this.redwineInfo(indexId)
+ },
+
+ /**
+ * 点击图片放大
+ */
+ clickImg(e) {
+ let imgUrl = e.currentTarget.dataset.img
+ wx.previewImage({
+ urls : [imgUrl], //需要预览的图片http链接列表,注意是数组
+ current : '' // 当前显示图片的http链接,默认是第一个
+ })
+ },
+
+ /**
+ * 处理未登录时的转跳
+ */
+ loginGo(e){
+ wx.navigateTo({
+ url: "/pages/login/login?way=activity"
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/activityInfo/activityInfo.json b/pages/activityInfo/activityInfo.json
new file mode 100644
index 0000000..f7eceee
--- /dev/null
+++ b/pages/activityInfo/activityInfo.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "商品购买"
+}
\ No newline at end of file
diff --git a/pages/activityInfo/activityInfo.wxml b/pages/activityInfo/activityInfo.wxml
new file mode 100644
index 0000000..625063a
--- /dev/null
+++ b/pages/activityInfo/activityInfo.wxml
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+ 收货人:{{address.name}}{{address.mobile}}
+
+ 收货地址:{{address.all_address}}
+
+
+
+
+
+ 添加地址
+
+
+
+
+
+
+
+
+
+
+ {{item.classtitle}}
+
+
+
+
+
+
+ 平安好车主超级福利专享
+
+
+
+
+
+
+
+ {{goodCont.title}}
+ {{goodCont.subtitle}}
+
+ ¥{{params[paramsIndex].price}}
+
+ -
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{item.amount}}
+
+
+ 比优特电子券
+
+ 赠
+
+
+ {{item.title}}
+
+ 卡数(张)
+ x {{item.number}}
+
+
+
+
+
+
+
+
+
+
+ 赠
+
+
+ {{item.title}}
+ {{item.subtitle}}
+ 原价:{{item.amount}}元
+
+ 活动:0.00元
+ x {{item.number}}
+
+
+
+
+
+
+
+ 小计¥{{params[paramsIndex].amount}}
+
+
+
+ 请选择提交方式
+
+
+
+ {{platformCp[platIndex].name}}
+
+
+
+
+
+
+
+ 快递
+
+ 免运费 包邮
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/activityInfo/activityInfo.wxss b/pages/activityInfo/activityInfo.wxss
new file mode 100644
index 0000000..bca5656
--- /dev/null
+++ b/pages/activityInfo/activityInfo.wxss
@@ -0,0 +1,575 @@
+/* 收货地址 */
+.borderBottom {
+
+ border-bottom: 110rpx solid transparent;
+}
+
+.order-address {
+ padding: 20rpx 80rpx 30rpx 100rpx;
+ position: relative;
+ background: white;
+}
+
+.order-address-back {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ vertical-align: bottom;
+}
+
+.order-address-name {
+ padding-right: 300rpx;
+ position: relative;
+ font-size: 33rpx;
+ padding-bottom: 10rpx;
+}
+
+.order-address-name text {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 280rpx;
+ text-align: right;
+}
+
+.order-address-text {
+ color: #464854;
+ font-size: 26rpx;
+}
+
+.address-icon,
+.arrows-right {
+ position: absolute;
+}
+
+.address-icon {
+ height: 42rpx;
+ width: 42rpx;
+ left: 30rpx;
+ top: calc(50% - 26rpx);
+ top: -webkit-calc(50% - 26rpx);
+}
+
+.arrows-right {
+ height: 28rpx;
+ width: 28rpx;
+ right: 30rpx;
+ top: calc(50% - 19rpx);
+ top: -webkit-calc(50% - 19rpx);
+}
+
+.order-add-address {
+ text-align: center;
+ padding: 30rpx 0;
+}
+
+.order-add-address navigator {
+ display: inline-block;
+ background: #f57e32;
+ color: white;
+ line-height: 60rpx;
+ padding: 0 30rpx;
+ margin-right: 20rpx;
+ font-size: 28rpx;
+ border-radius: 4rpx;
+}
+
+
+.order-add-address-img {
+ width: 25rpx;
+ height: 25rpx;
+ margin-right: 10rpx;
+ vertical-align: -2rpx;
+}
+
+/* 订单商品 */
+
+.order-goods {
+ margin: 0 0 20rpx;
+}
+
+.order-content {
+ border-bottom: solid 100rpx transparent;
+}
+
+.goods-goods-mall {
+ padding: 20rpx 30rpx 0 30rpx;
+ line-height: 50rpx;
+}
+
+.goods-goods-mall image {
+ width: 48rpx;
+ height: 48rpx;
+ vertical-align: middle;
+ margin-right: 15rpx;
+ margin-bottom: 2rpx;
+}
+
+.goods-goods-li {
+ padding: 20rpx 30rpx;
+ position: relative;
+ background: white;
+ display: flex;
+ height: 200rpx;
+}
+
+.goods-img {
+ position: absolute;
+ top: 20rpx;
+ left: 20rpx;
+ height: 200rpx;
+ width: 200rpx;
+ background: #f5f6fa;
+ border-radius: 4rpx;
+}
+
+.goods-body {
+ padding-left: 220rpx;
+ width: calc(100% - 220rpx);
+}
+
+.goods-name {
+ font-weight: bold;
+ padding-bottom: 20rpx;
+ font-size: 32rpx;
+}
+
+.goods-cont {
+ display: flex;
+}
+
+.goods-text {
+ color: #999;
+ font-size: 28rpx;
+ margin-bottom: 40rpx;
+}
+
+.goods-price {
+ flex: 1;
+ line-height: 50rpx;
+ font-size: 36rpx;
+ font-weight: 600;
+ color: #f57e32;
+}
+
+.goods-price text {
+ font-size: 26rpx;
+}
+
+.good-number {
+ display: flex;
+ width: 180rpx;
+ text-align: center;
+ height: 50rpx;
+}
+
+.good-number-btn {
+ width: 50rpx;
+ color: #000;
+ font-weight: 600;
+}
+
+.good-number-input {
+ flex: 1;
+ margin: 0 6rpx;
+ height: 50rpx;
+ line-height: 50rpx;
+ color: #000;
+ font-size: 26rpx;
+}
+
+.good-number-input {
+ background: #f7f7f7;
+ font-size: 24rpx;
+}
+
+.good-number-btn {
+ background: #f0f0f0;
+}
+
+/* 购物券 */
+.goodsCoupon {
+ background: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.goodsCoupon-right {
+ width: calc(100% - 270rpx);
+ position: absolute;
+ left: 250rpx;
+ top: 30rpx;
+ right: 20rpx;
+}
+
+.goodsCoupon-name {
+ margin-bottom: 30rpx;
+ font-size: 32rpx;
+}
+
+.goodsCoupon-text {
+ color: #999;
+ font-size: 26rpx;
+ margin-bottom: 24rpx;
+}
+
+.goodsCoupon-name-box {
+ margin-bottom: 10rpx;
+}
+
+.goodsCoupon-sheet {
+ display: flex;
+ font-size: 30rpx;
+ color: #999;
+}
+
+.goodsCoupon-cost {
+ color: #000;
+ font-size: 28rpx;
+ margin: 14rpx 0;
+}
+
+.goodsCoupon-price {
+ font-size: 28rpx;
+ color: #f57e32;
+}
+
+.goodsCoupon-box-right {
+ top: 16rpx;
+}
+
+.goodsCoupon-sheet view {
+ display: inline-block;
+ flex: 1;
+}
+
+.goodsCoupon-sheet text {
+ font-size: 24rpx;
+ line-height: 44rpx;
+ padding-right: 6rpx;
+}
+
+.goodsCoupon-left {
+ position: relative;
+ width: 200rpx;
+ height: 140rpx;
+}
+
+.goodsCoupon-box {
+ width: 200rpx;
+ height: 200rpx;
+}
+
+.goodsBox-img {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.goodsCoupon-img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.goodsCoupon-number {
+ position: absolute;
+ top: 20rpx;
+ left: 0;
+ z-index: 2;
+ width: 100%;
+ text-align: center;
+ font-size: 40rpx;
+ color: #fff;
+ font-weight: 600;
+ text-shadow: 2rpx 2rpx 2rpx #d69e50;
+}
+
+.goodsCoupon-number text {
+ font-size: 28rpx;
+}
+
+.goodsCoupon-btn {
+ position: absolute;
+ right: 10rpx;
+ left: 10rpx;
+ bottom: 20rpx;
+ z-index: 2;
+ background-image: linear-gradient(#eacf90, #f7e09f, #ce9e4d);
+ color: #000;
+ font-size: 24rpx;
+ width: calc(100% - 20rpx);
+ text-align: center;
+ height: 40rpx;
+ line-height: 40rpx;
+ border-radius: 30rpx;
+ transform: scale(0.83, 0.83);
+}
+
+.goodsCoupon-tips {
+ position: absolute;
+ top: 6rpx;
+ left: 14rpx;
+ z-index: 2;
+ color: #fff;
+ transform: rotate(-48deg);
+}
+
+.goodsCoupon-tips text {
+ transform: scale(0.83, 0.83);
+ font-size: 24rpx;
+ display: inline-block;
+}
+
+.goodsBox-tips {
+ display: inline-block;
+ width: 49rpx;
+ padding: 8rpx 0 6rpx 0;
+ background: #EDBA19;
+ top: -10rpx;
+ left: 10rpx;
+ position: absolute;
+ text-align: center;
+ border-top-left-radius: 4rpx;
+ font-size: 24rpx;
+ color: #ffff;
+ transform: scale(.9, .9);
+}
+
+.goodsBox-tips:before,
+.goodsBox-tips:after {
+ content: "";
+ position: absolute;
+}
+
+.goodsBox-tips:before {
+ height: 0;
+ width: 0;
+ border-bottom: 10rpx solid #745800;
+ border-right: 10rpx solid transparent;
+ right: -10rpx;
+ top: 0;
+}
+
+.goodsBox-tips:after {
+ height: 0;
+ width: 0;
+ border-left: 25rpx solid #EDBA19;
+ border-right: 25rpx solid #EDBA19;
+ border-bottom: 25rpx solid transparent;
+ bottom: -22rpx;
+ left: 0;
+}
+
+.goodsLabel {
+ background: #fff;
+ text-align: right;
+ padding: 20rpx;
+ font-size: 26rpx;
+}
+
+.goodsLabel text {
+ font-weight: 600;
+ font-size: 30rpx;
+ padding-left: 10rpx;
+ color: #f57e32;
+}
+
+/* 底部工具栏 */
+
+.order-footer,
+.order-login-footer {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ border-top: solid 1rpx #f2f2f2;
+ height: 100rpx;
+ line-height: 100rpx;
+ z-index: 99;
+}
+
+.order-footer {
+ background: white;
+}
+
+.order-login-footer {
+ background: #f57e32;
+ text-align: center;
+ color: #fff;
+}
+
+.order-footer-total {
+ padding-right: calc(30vw + 30rpx);
+ padding-right: -webkit-calc(30vw + 30rpx);
+ padding-left: 30rpx;
+ color: #737787;
+ font-size: 28rpx;
+}
+
+.order-footer-total text {
+ color: #f57e32;
+}
+
+.order-footer-total-price {
+ font-weight: bold;
+ font-size: 30rpx;
+}
+
+.order-footer-btn[size="mini"] {
+ width: 30vw;
+ background: #f57e32;
+ color: white;
+ border-radius: 0;
+ height: 100rpx;
+ line-height: 100rpx;
+ font-size: 30rpx;
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+.order-footer-btn:after {
+ border: none;
+}
+
+.order-footer-btn.insufficient {
+ background: #737787;
+ text-align: center;
+}
+
+.order-textarea {
+ padding: 20rpx;
+}
+
+
+.rightsLabel {
+ background: #fff;
+ display: flex;
+ padding: 20rpx;
+ color: #6f7880;
+ font-size: 30rpx;
+ margin: 20rpx 0;
+}
+
+.rightsLabel .rightsLabel-left {
+ flex: 1;
+ color: #747d86;
+}
+
+.rightsLabel-black {
+ padding-top: 30rpx;
+}
+
+.rightsLabel-range {
+ display: flex;
+ color: #000;
+ font-weight: 600;
+}
+
+.rightsLabel-row {
+ width: 38rpx;
+ height: 38rpx;
+ margin: 2rpx 0 0 6rpx;
+}
+
+.rightsLabel-black .rightsLabel-right {
+ color: #000;
+ font-weight: 600;
+ font-size: 32rpx;
+}
+
+.rightsLabel-black .rightsLabel-left {
+ color: #000;
+}
+
+
+.rightsLabel-pay {
+ color: #000;
+}
+
+.rightsLabel-pay .rightsLabel-left {
+ flex: 1;
+}
+
+.rightsLabel-free {
+ color: #999;
+ padding-right: 20rpx;
+}
+
+/* tab */
+.order-tab {
+ display: flex;
+ background: #fff;
+ padding: 20rpx 0 25rpx;
+ color: #999;
+}
+
+.order-tab-item {
+ flex: 2;
+ text-align: center;
+ position: relative;
+}
+
+.order-tab-item::after {
+ position: absolute;
+ left: calc(50% - 50rpx);
+ bottom: -25rpx;
+ width: 100rpx;
+ height: 4rpx;
+ border-radius: 20rpx;
+ content: '';
+ background: transparent;
+}
+
+.order-tab-item.active {
+ color: #e2952b;
+ font-weight: 600;
+}
+
+.order-tab-item.active::after {
+ background: #e2952b;
+}
+
+/* 提示 */
+.goods-tips {
+ background: #fffbec;
+ color: #e2952b;
+ padding: 20rpx;
+ box-sizing: border-box;
+ font-size: 29rpx;
+ display: flex;
+ position: relative;
+}
+
+.goods-tips::after,
+.goods-tips::before {
+ position: absolute;
+ content: '';
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #fef5d1;
+}
+
+.goods-tips::after {
+ bottom: 0;
+}
+
+.goods-tips::before {
+ top: 0;
+}
+
+.goods-tips image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-right: 14rpx;
+ margin-top: 3rpx;
+}
\ No newline at end of file
diff --git a/pages/activityOrder/activityOrder.js b/pages/activityOrder/activityOrder.js
new file mode 100644
index 0000000..72b9f69
--- /dev/null
+++ b/pages/activityOrder/activityOrder.js
@@ -0,0 +1,146 @@
+// pages/activityOrder/activityOrder.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ stateType : '', //状态
+ counts : '', //数量
+ orderArr : [], //列表
+ page : {}, //下一页
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+
+ // 获取商品活动订单
+ this.orderInfo();
+ },
+
+ /**
+ * 商品活动订单
+ */
+ orderInfo(page) {
+ wx.$api.index.activityOrder(this.data.stateType, page).then(res=>{
+ let listArr = this.data.orderArr,
+ newData = []
+ if(page == 1 || page == undefined) listArr = []
+
+ newData = listArr.concat(res.data.data)
+ this.setData({
+ counts : res.data.count,
+ orderArr : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * tabs
+ */
+ orderTab(e){
+ if(this.data.stateType != e.currentTarget.dataset.state){
+ this.setData({
+ stateType: e.currentTarget.dataset.state
+ })
+
+ // 获取商品活动订单
+ this.orderInfo()
+
+ wx.pageScrollTo({
+ scrollTop: 0
+ })
+ }
+ },
+
+ /**
+ * 取消订单
+ */
+ orderDelete(e) {
+ let orderId = e.currentTarget.dataset.id
+ wx.showModal({
+ title : '订单取消',
+ content : '确认取消吗?',
+ success : res=> {
+ if (res.confirm) {
+ wx.$api.index.cance(orderId).then(res=>{
+ // 获取商品活动订单
+ this.orderInfo()
+
+ wx.showToast({
+ title: res.data,
+ icon : 'none'
+ })
+ })
+ } else if (res.cancel) {
+ wx.showToast({
+ title : '取消',
+ icon : 'loading',
+ duration: 1000
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 订单支付
+ */
+ orderPay(e) {
+ let orderId = e.currentTarget.dataset.id
+
+ wx.login({
+ success: res=> {
+ wx.$api.index.repay(orderId).then(res=>{
+ let payInfo = JSON.parse(res.data.json)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.redirectTo({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ },2000)
+ }
+ },
+ fail : res=>{
+ wx.redirectTo({
+ url: '/pages/activityOrder/activityOrder',
+ })
+ }
+ })
+ })
+ }
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.orderInfo(pageNumber)
+ }
+ }
+
+})
\ No newline at end of file
diff --git a/pages/activityOrder/activityOrder.json b/pages/activityOrder/activityOrder.json
new file mode 100644
index 0000000..f825b95
--- /dev/null
+++ b/pages/activityOrder/activityOrder.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "我的订单",
+ "enablePullDownRefresh": true
+}
\ No newline at end of file
diff --git a/pages/activityOrder/activityOrder.wxml b/pages/activityOrder/activityOrder.wxml
new file mode 100644
index 0000000..0fce770
--- /dev/null
+++ b/pages/activityOrder/activityOrder.wxml
@@ -0,0 +1,66 @@
+
+
+
+ 全部
+
+
+ 未支付
+ {{counts.init}}
+
+
+ 已支付
+ {{counts.paid}}
+
+
+ 已发货
+ {{counts.send}}
+
+
+
+
+
+
+
+
+ {{item.activity_name}}
+
+
+ {{item.order_id}}
+ {{item.status_text}}
+ {{item.status_text}}
+ {{item.status_text}}
+
+
+
+
+ {{item.title}}
+
+ ¥{{item.price}} × {{item.number}}
+
+
+ 礼盒
+ 购物券
+
+
+
+
+ 订单详情
+ 取消订单
+ 立即支付
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+ 暂无订单
+
\ No newline at end of file
diff --git a/pages/activityOrder/activityOrder.wxss b/pages/activityOrder/activityOrder.wxss
new file mode 100644
index 0000000..3abc3ae
--- /dev/null
+++ b/pages/activityOrder/activityOrder.wxss
@@ -0,0 +1,228 @@
+/*
+ * 亿时代
+ */
+
+.order-tab {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ display: flex;
+ height: 80rpx;
+ line-height: 80rpx;
+ z-index: 9;
+ background: white;
+}
+
+.order-tab-item {
+ font-size: 28rpx;
+ width: 25%;
+ text-align: center;
+ border-bottom: solid 2rpx #f7f7f7;
+ color: #464854;
+ background: white;
+ position: relative;
+}
+
+.order-tab-item.active {
+ color: #f57e32;
+}
+
+.order-tab-item::after {
+ content: '';
+ position: absolute;
+ width: 30rpx;
+ height: 4rpx;
+ background: transparent;
+ left: calc(50% - 15rpx);
+ bottom: -2rpx;
+}
+
+.order-tab-item.active::after {
+ background: #f57e32;
+}
+
+.state-tips {
+ position: absolute;
+ top: 10rpx;
+ right: 14rpx;
+ background: #e92706;
+ color: #fff;
+ font-size: 24rpx;
+ transform: scale(.7, .7);
+ border-radius: 60rpx 60rpx 60rpx 0;
+ width: 48rpx;
+ height: 34rpx;
+ line-height: 34rpx;
+}
+
+/* 订单列表 */
+
+.order-content {
+ padding: 80rpx 0 20rpx 0;
+}
+
+.order-content-li {
+ background: white;
+ margin-top: 20rpx;
+ position: relative;
+}
+
+.order-name {
+ background: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ border-bottom: solid 1rpx #f3f3f3;
+ display: flex;
+}
+
+.order-name image {
+ background: linear-gradient(#000, #000);
+ background-blend-mode: lighten;
+ background-size: cover;
+ width: 26rpx;
+ height: 26rpx;
+ border-radius: 50%;
+ margin: 8rpx 14rpx 0 0;
+}
+
+.order-store {
+ padding: 20rpx;
+ border-bottom: solid 1rpx #f3f3f3;
+ display: flex;
+}
+
+.order-goods-tips {
+ display: flex;
+}
+
+.order-goods-tips text {
+ display: inline-block;
+ background: #e92706;
+ color: #fff;
+ border-radius: 20rpx;
+ padding: 0 20rpx;
+ height: 42rpx;
+ line-height: 42rpx;
+ font-size: 24rpx;
+ transform: scale(.8, .8);
+}
+
+text.order-goods-tips-color {
+ background: #e6b329;
+}
+
+.order-store-stateText {
+ color: #e6b329;
+ font-size: 26rpx;
+}
+
+.order-store-stateText.red {
+ color: #e92344;
+}
+
+.order-store-stateText.green {
+ color: #79b300;
+}
+
+.order-store-title {
+ flex: 1;
+ color: #999;
+ font-size: 28rpx;
+}
+
+.order-store-orderid {
+ color: #747788;
+ font-size: 25rpx;
+}
+
+.order-store-title text {
+ color: white;
+ font-size: 24rpx;
+ background: #e92344;
+ margin-right: 10rpx;
+ padding: 0 10rpx;
+}
+
+.order-goods {
+ padding: 20rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.order-goods-cover {
+ width: 150rpx;
+ height: 150rpx;
+ vertical-align: top;
+ border-radius: 4rpx;
+}
+
+.order-goods-content {
+ position: absolute;
+ left: 190rpx;
+ top: 20rpx;
+ right: 20rpx;
+ width: calc(100% - 210rpx);
+}
+
+.order-goods-content-name {
+ margin-bottom: 15rpx;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.order-goods-content-price {
+ color: #747788;
+ display: flex;
+ margin-bottom: 14rpx;
+ font-size: 28rpx;
+}
+
+.order-goods-content-price text {
+ color: #f57e32;
+ display: inline-block;
+ margin-right: 10rpx;
+ font-size: 30rpx;
+}
+
+.order-total {
+ padding: 20rpx;
+ box-sizing: border-box;
+ font-size: 26rpx;
+ line-height: 50rpx;
+ color: #747788;
+ display: flex;
+}
+
+.order-total view {
+ margin-right: 30rpx;
+}
+
+.order-total text {
+ color: #e92344;
+ font-weight: bold;
+}
+
+.order-btns {
+ font-size: 25rpx;
+ display: flex;
+ padding: 20rpx;
+ box-sizing: border-box;
+ flex-wrap: wrap;
+ flex-direction: row-reverse;
+}
+
+.order-btn {
+ margin-left: 20rpx;
+ height: 52rpx;
+ line-height: 50rpx;
+ box-sizing: border-box;
+ border: solid 1rpx #747788;
+ padding: 0 20rpx;
+ border-radius: 30rpx;
+}
+
+.order-btn-back {
+ border-color: #f57e32;
+ color: #f57e32;
+}
\ No newline at end of file
diff --git a/pages/address/address.js b/pages/address/address.js
new file mode 100644
index 0000000..20bc164
--- /dev/null
+++ b/pages/address/address.js
@@ -0,0 +1,102 @@
+// pages/address/address.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ type : '', //来源类型
+ addressArr : [] //收货地址
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ type: options.type
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow(){
+ this.addressInfo();
+ },
+
+ /* 地址列表
+ */
+ addressInfo(){
+ wx.$api.address.index().then(res=>{
+ this.setData({
+ addressArr: res.data
+ })
+ })
+ },
+
+ /**
+ * 删除地址
+ */
+ addressRemove(e){
+ let id = e.target.dataset.id,
+ index = e.target.dataset.index,
+ list = this.data.addressArr
+
+ list.splice(index,1)
+
+ wx.showModal({
+ title : '提示',
+ content : '是否删除地址',
+ success : res=> {
+ if (res.confirm) {
+ wx.showLoading({
+ title: '删除中',
+ })
+ wx.$api.address.remove(id).then(res=>{
+ this.setData({
+ addressArr: list
+ })
+ wx.showToast({
+ title: res.data,
+ icon : "none"
+ })
+
+ wx.hideLoading()
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 设为默认地址
+ */
+ addressDefault(e){
+ let id = e.currentTarget.dataset.id
+
+ wx.$api.address.setdef(id).then(res=>{
+ this.addressInfo();
+ wx.showToast({
+ title: res.data,
+ icon : "none"
+ })
+ })
+ },
+
+ /**
+ * 选择地址
+ */
+ selectAddress(e){
+ let atAdds = this.data.addressArr[e.currentTarget.dataset.index]
+
+ let pages = getCurrentPages(),
+ prepage = pages[pages.length-2]
+
+ prepage.setData({
+ address: atAdds
+ })
+
+ wx.navigateBack()
+ }
+})
\ No newline at end of file
diff --git a/pages/address/address.json b/pages/address/address.json
new file mode 100644
index 0000000..36ec88b
--- /dev/null
+++ b/pages/address/address.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "我的地址"
+}
\ No newline at end of file
diff --git a/pages/address/address.wxml b/pages/address/address.wxml
new file mode 100644
index 0000000..181f38e
--- /dev/null
+++ b/pages/address/address.wxml
@@ -0,0 +1,40 @@
+
+
+ {{item.name}}{{item.mobile}}
+
+
+ 默认
+
+ {{item.all_address}}
+
+
+
+
+ 选择地址
+
+
+
+ 删除
+ 编辑
+
+
+ 设为默认地址
+
+
+
+
+ 默认地址
+
+
+
+
+
+
+
+
+ 还未添加收货地址
+
+
+
\ No newline at end of file
diff --git a/pages/address/address.wxss b/pages/address/address.wxss
new file mode 100644
index 0000000..47effc5
--- /dev/null
+++ b/pages/address/address.wxss
@@ -0,0 +1,112 @@
+
+/**
+ * 亿时代
+ */
+
+ .address-list{
+ border-bottom: 110rpx solid transparent;
+}
+
+.address{
+ padding: 20rpx 30rpx;
+ border-bottom: solid 20rpx #f2f2f2;
+ background: white;
+}
+
+.address-name{
+ font-size: 32rpx;
+ line-height: 50rpx;
+}
+
+.address-name text{
+ color: #747788;
+ padding-left: 10rpx;
+ font-size: 28rpx;
+}
+
+.address-info{
+ padding-bottom: 20rpx;
+ display: flex;
+}
+
+.address-tool{
+ overflow: hidden;
+}
+
+.address-info-tag{
+ background: #30bb29;
+ margin-right: 20rpx;
+ padding: 0 10rpx;
+ height: 32rpx;
+ line-height: 32rpx;
+ color: white;
+ font-size: 22rpx;
+ border-radius: 4rpx;
+ margin-top: 6rpx;
+}
+
+.address-tool-btn{
+ margin-left: 30rpx;
+ float: right;
+ border:solid 1rpx #c0c0c0;
+ height: 46rpx;
+ line-height: 44rpx;
+ padding: 0 30rpx;
+ border-radius: 6rpx;
+ font-size: 24rpx;
+}
+
+.address-tool-btn.yellow {
+ border:solid 1rpx #f57e32;
+ color: #f57e32;
+ padding: 0 14rpx;
+ height: 50rpx;
+ line-height: 50rpx;
+}
+
+.address-tool-btn.acitve{
+ float: left;
+ margin-left: 0;
+ padding: 0;
+ border: none;
+ color: #747788;
+ font-size: 26rpx;
+}
+
+.address-tool-btn.acitve image{
+ margin-right: 10rpx;
+ vertical-align: -7rpx;
+}
+
+.address-tool-btn image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-right: 4rpx;
+ vertical-align: -6rpx;
+}
+
+/* footer */
+
+.address-footer{
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ background: white;
+ z-index: 9;
+ height: 110rpx;
+}
+
+.address-footer navigator{
+ width: 100%;
+ line-height: 80rpx;
+ height: 80rpx;
+ margin: 15rpx 0;
+ text-align: center;
+ background: #f57e32;
+ font-size: 30rpx;
+ color: white;
+ border-radius: 10rpx
+}
diff --git a/pages/address_form/address_form.js b/pages/address_form/address_form.js
new file mode 100644
index 0000000..5df69f0
--- /dev/null
+++ b/pages/address_form/address_form.js
@@ -0,0 +1,240 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ addressInfo: '',
+ type : '', //类型
+ addressId : '',
+ defaultVal :'',
+ name : '',
+ mobile : '',
+ address : '',
+
+ //省份选择
+ areas : [],
+ areaSn : '',
+ areaIndex : 0,
+
+ //市级选择
+ cityList : [],
+ cityId : 0,
+ cityIndex : 0,
+
+ //区域选择
+ regiList : [],
+ regiId : 0,
+ regiIndex : 0,
+
+ cityLayer : false
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ type : options.type
+ })
+ if (options.type == 'Add') {
+ wx.setNavigationBarTitle({
+ title: '添加收货地址'
+ })
+ // 获取位置
+ wx.getLocation({
+ type: 'gcj02',
+ success: res=> {
+ this.setData({
+ longitude : res.longitude,
+ latitude : res.latitude
+ })
+ // 解析坐标
+ getApp().qqmapsdk.reverseGeocoder({
+ location: {
+ latitude : res.latitude,
+ longitude : res.longitude
+ },
+ success: res=>{
+ if(res.message == "query ok"){
+ let addressInfo = res.result.address_component
+ let areaIndex = this.data.areas.findIndex(val => val.name == addressInfo.province)
+ this.setData({
+ areaIndex : areaIndex
+ })
+ this.getProvince()
+ }else{
+ wx.showToast({
+ title: res.message,
+ icon : 'none'
+ })
+ }
+ }
+ })
+ }
+ })
+ this.getProvince()
+ } else if (options.type == 'Compile') {
+ wx.setNavigationBarTitle({
+ title: '编辑收货地址'
+ })
+ this.setData({
+ addressId: options.id
+ })
+ this.getUserAddress()
+ }
+ },
+
+ /**
+ * 获取收货人信息
+ */
+ getUserAddress(){
+ wx.$api.address.edit(this.data.addressId).then(res=>{
+ let areasValue = res.data.provinces.findIndex(val=> val.name == res.data.address.province_name),
+ cityValue = res.data.cities.findIndex(val=> val.name == res.data.address.city_name),
+ regiValue = res.data.districts.findIndex(val=> val.name == res.data.address.district_name)
+ this.setData({
+ name : res.data.address.name,
+ mobile : res.data.address.mobile,
+ areas : res.data.provinces,
+ cityList : res.data.cities,
+ regiList : res.data.districts,
+ areaIndex : areasValue,
+ cityIndex : cityValue,
+ regiIndex : regiValue,
+ areaSn : res.data.address.province_id,
+ cityId : res.data.address.city_id,
+ regiId : res.data.address.district_id,
+ address : res.data.address.address,
+ defaultList : res.data.address,
+ isDefault : res.data.address.is_default
+ })
+ })
+ },
+
+ /**
+ * 获取省信息
+ */
+ getProvince() {
+ wx.$api.address.create().then(res=>{
+ let areaArr = res.data.provinces,
+ areaIndex = this.data.areaIndex
+ this.citylist(areaArr[areaIndex].code)
+ this.setData({
+ areaSn : areaArr[areaIndex].code,
+ areas : areaArr
+ })
+ })
+ },
+
+ /**
+ * 所在省份
+ */
+ areasChange(e) {
+ let area = this.data.areas,
+ index = e.detail.value,
+ atcode = area[index].code
+ if (index != this.data.areaIndex) {
+ this.setData({
+ areaIndex : index,
+ areaSn : atcode
+ })
+
+ // 获取市级列表
+ this.citylist(atcode)
+ }
+ },
+
+ /**
+ * 市级列表
+ */
+ citylist(code) {
+ wx.$api.address.children(code).then(res=>{
+ let cityArr = res.data
+ this.regilist(cityArr[0].code)
+ this.setData({
+ cityId : cityArr[0].code,
+ cityList : cityArr,
+ cityIndex : 0
+ })
+ })
+ },
+
+ /**
+ * 市级下拉筛选
+ */
+ city(e) {
+ let city = this.data.cityList,
+ index = e.detail.value,
+ citycode = city[index].code
+ if (index != this.data.areaIndex) {
+ this.setData({
+ cityIndex: index,
+ cityId : citycode
+ })
+
+ // 获取市级列表
+ this.regilist(citycode)
+ }
+ },
+
+
+ /**
+ * 区列表
+ */
+ regilist(areaCode) {
+ wx.$api.address.children(areaCode).then(res=>{
+ this.setData({
+ regiList : res.data,
+ regiId : res.data[0].code,
+ regiIndex : 0
+ })
+ })
+ },
+
+ /**
+ * 区下拉筛选
+ */
+ regi(e) {
+ let newIndex = e.detail.value
+ this.setData({
+ regiIndex : newIndex,
+ regiId : this.data.regiList[newIndex].code
+ })
+ },
+
+ /**
+ * 保存信息
+ */
+ siteform(e) {
+ if(this.data.type == 'Compile') {
+ // 编辑地址
+ wx.$api.address.keep(this.data.addressId, e.detail.value.name, e.detail.value.mobile, this.data.areaSn, this.data.cityId, this.data.regiId, e.detail.value.address).then(res=>{
+ wx.navigateBack()
+ })
+ } else {
+ // 创建地址
+ wx.$api.address.add(e.detail.value.name, e.detail.value.mobile, this.data.areaSn, this.data.cityId, this.data.regiId, e.detail.value.address, this.data.defaultVal).then(res=>{
+ wx.navigateBack()
+ })
+ }
+ },
+
+ /**
+ * 设为默认地址
+ */
+ addressDefault(e) {
+ let val = e.detail.value
+ this.setData({
+ defaultVal: val
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/address_form/address_form.json b/pages/address_form/address_form.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/address_form/address_form.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/address_form/address_form.wxml b/pages/address_form/address_form.wxml
new file mode 100644
index 0000000..065679a
--- /dev/null
+++ b/pages/address_form/address_form.wxml
@@ -0,0 +1,71 @@
+
+
\ No newline at end of file
diff --git a/pages/address_form/address_form.wxss b/pages/address_form/address_form.wxss
new file mode 100644
index 0000000..7b78406
--- /dev/null
+++ b/pages/address_form/address_form.wxss
@@ -0,0 +1,148 @@
+/**
+ * 亿时代
+ */
+
+.site-form {
+ background: white;
+ display: block;
+}
+
+.site-btn {
+ padding: 20rpx 30rpx;
+}
+
+.site-input {
+ padding: 0 30rpx 0 200rpx;
+ position: relative;
+ line-height: 90rpx;
+ min-height: 90rpx;
+}
+
+.site-input label {
+ position: absolute;
+ left: 30rpx;
+ top: 0;
+}
+
+.site-input input {
+ height: 90rpx;
+}
+
+.site-input image {
+ width: 38rpx;
+ height: 38rpx;
+ position: absolute;
+ right: 20rpx;
+ top: calc(50% - 19rpx);
+}
+
+.conneColor {
+ width: calc(100%- 100rpx);
+}
+
+.site-input::before {
+ position: absolute;
+ bottom: 0;
+ left: 30rpx;
+ right: 0;
+ height: 1rpx;
+ content: "";
+ background: #e4e6f2;
+}
+
+.site-input:last-child::before {
+ display: none;
+}
+
+.tui-picker-detail {
+ width: 33%;
+}
+
+.site-btn button[size="mini"] {
+ width: 100%;
+ background: #f57e32;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 30rpx;
+ color: white;
+ padding: 0;
+}
+
+/* pickerView */
+
+.pickerView-back {
+ background: rgba(0, 0, 0, .3);
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: none;
+}
+
+.pickerView-back.active {
+ display: block;
+}
+
+.pickerView-layer {
+ position: fixed;
+ bottom: -571rpx;
+ left: 0;
+ width: 100%;
+ background: white;
+ transition: all .3s;
+}
+
+.pickerView-layer.active {
+ bottom: 0;
+}
+
+.pickerView-btn {
+ line-height: 90rpx;
+ font-size: 30rpx;
+ padding: 0 30rpx;
+ display: flex;
+ justify-content: space-between;
+}
+
+.pickerView {
+ height: 480rpx;
+ padding: 0 10rpx;
+}
+
+.pickerView-name {
+ line-height: 80rpx;
+ padding: 0 20rpx;
+ text-align: center;
+}
+
+.pickerView-mask {
+ border-top: solid 1rpx #e4e6f2;
+}
+
+.pickerView-indicator {
+ height: 80rpx;
+}
+
+.pickerView-determine {
+ color: #f57e32;
+}
+
+.pickerView-cancel {
+ color: #747788;
+}
+
+.site-switch {
+ font-size: 32rpx;
+ margin: 30rpx;
+ display: flex;
+ line-height: 40rpx;
+}
+
+.site-switch text {
+ flex: 1;
+}
+
+.site-switch-active {
+ color: #797979;
+}
\ No newline at end of file
diff --git a/pages/chooseTel/chooseTel.js b/pages/chooseTel/chooseTel.js
new file mode 100644
index 0000000..8a25ceb
--- /dev/null
+++ b/pages/chooseTel/chooseTel.js
@@ -0,0 +1,151 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ wechatUserId: "",
+ loginCode : "",
+ userInfo : "",
+ isLogin : false,
+ iv : '',
+ enData : '',
+ loginTel : [] //用户手机号
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+
+ // 登录方式-活动
+ this.setData({
+ way : options.way
+ })
+
+ if(options.type == "mobiles") {
+ wx.$api.user.mobiles().then(res=>{
+ this.setData({
+ loginTel : res.data
+ })
+ })
+ }else {
+ // 获取用户手机列表
+ const logintel = wx.getStorageSync("users")
+
+ this.setData({
+ loginTel : logintel
+ })
+ }
+ },
+
+ /**
+ * 生命周期函数--页面显示
+ */
+ onShow() {
+ wx.login({
+ success: res => {
+ this.setData({
+ loginCode: res.code
+ })
+ }
+ })
+ },
+
+ /**
+ * 绑定手机号码
+ */
+ mobile(e){
+ if(e.detail.errMsg == "getPhoneNumber:ok"){
+ this.setData({
+ isLogin : true,
+ iv : e.detail.iv,
+ enData : e.detail.encryptedData
+ })
+ this.binMobel()
+ }else{
+ wx.showToast({
+ title: '拒绝了手机号码授权',
+ icon : 'none'
+ })
+ }
+ },
+
+ /**
+ * 绑定手机号码
+ */
+ binMobel(){
+ let code = this.data.loginCode,
+ iv = this.data.iv,
+ mobile = this.data.enData
+
+ wx.$api.enroll.bindmobile(code, iv, mobile).then(res=>{
+ this.setData({
+ isLogin: false
+ })
+
+ getApp().globalData.token = res.data.token
+
+ // 更新全局存储器用户状态
+ getApp().globalData.isUser = true
+
+
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : res.data.token
+ })
+
+ if(this.data.way == "activity") {
+ // 回到活动首页
+ wx.reLaunch({
+ url: '/pages/activityInfo/activityInfo'
+ })
+ } else {
+ // 回到个人中心
+ wx.switchTab({
+ url: '/pages/user/user'
+ })
+ }
+ })
+ },
+
+ /**
+ * 点击账号登录
+ */
+ loginGo(e) {
+ let username = e.currentTarget.dataset.name,
+ wechatUser_id = app.globalData.wechatUser
+
+ wx.$api.enroll.tel(wechatUser_id, username).then(res=>{
+ app.globalData.token = res.data.token
+ app.globalData.isUser = true
+
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : res.data.token
+ })
+
+ if(this.data.way == "activity") {
+ // 回到活动首页
+ wx.reLaunch({
+ url: '/pages/activityInfo/activityInfo'
+ })
+ } else {
+ // 回到个人中心
+ wx.switchTab({
+ url: '/pages/user/user'
+ })
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/chooseTel/chooseTel.json b/pages/chooseTel/chooseTel.json
new file mode 100644
index 0000000..42c8728
--- /dev/null
+++ b/pages/chooseTel/chooseTel.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "绑定手机号"
+}
\ No newline at end of file
diff --git a/pages/chooseTel/chooseTel.wxml b/pages/chooseTel/chooseTel.wxml
new file mode 100644
index 0000000..012a561
--- /dev/null
+++ b/pages/chooseTel/chooseTel.wxml
@@ -0,0 +1,26 @@
+
+
+ 切换手机号登录
+ 轻触账户以登录
+
+
+
+
+
+
+
+ {{item.username}}
+
+ 当前登录
+
+
+
+
+
+
+
+ 您还没有绑定手机号
+
+
+
+
\ No newline at end of file
diff --git a/pages/chooseTel/chooseTel.wxss b/pages/chooseTel/chooseTel.wxss
new file mode 100644
index 0000000..317a7bd
--- /dev/null
+++ b/pages/chooseTel/chooseTel.wxss
@@ -0,0 +1,75 @@
+/* 切换手机号 */
+.chooseTel-title {
+ background: #fff;
+ padding: 40rpx 30rpx;
+ color: #999;
+}
+
+.chooseTel-title text {
+ font-size: 36rpx;
+ font-weight: 600;
+ margin-bottom: 20rpx;
+ display: block;
+ color: #000;
+}
+
+.chooseList {
+ display: flex;
+ background: #fff;
+ line-height: 100rpx;
+ padding: 20rpx;
+ box-sizing: border-box;
+}
+
+.chooseList-left {
+ display: flex;
+}
+
+.chooseList-img {
+ width: 90rpx;
+ height: 90rpx;
+ border-radius: 50%;
+ margin-right: 30rpx;
+}
+
+.chooseList-btn {
+ font-size: 24rpx;
+ background: #00c12d;
+ border-radius: 30rpx;
+ height: 42rpx;
+ line-height: 42rpx;
+ color: #fff;
+ padding: 0 15rpx;
+ margin-top: 28rpx;
+ margin-left: 30rpx;
+}
+
+.chooseAdd {
+ width: calc(100% - 60rpx);
+ margin: 60rpx auto 0;
+ background: #fff;
+ border-radius: 50rpx;
+ line-height: 80rpx;
+ height: 80rpx;
+ text-align: center;
+ box-shadow: 0 0 10rpx rgba(0, 0,0, .05);
+ padding: 0;
+}
+
+.chooseTips {
+ background: #fff;
+ text-align: center;
+ padding: 30rpx 0 50rpx;
+}
+
+.chooseTips image {
+ width: 400rpx;
+ height: 350rpx;
+ display: block;
+ margin: 0 auto 20rpx;
+}
+
+.chooseTips text {
+ font-size: 34rpx;
+ color: #999;
+}
\ No newline at end of file
diff --git a/pages/classify/classify.js b/pages/classify/classify.js
new file mode 100644
index 0000000..c886244
--- /dev/null
+++ b/pages/classify/classify.js
@@ -0,0 +1,84 @@
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ noticeData : '', //公告
+ infoData : '', //权益数据
+ content : '', //内容简介
+ noticeShow : '', //公告开关
+ infoItems : [], //卡券专区
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.indexNav(options.id)
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+
+ },
+
+ /**
+ * 卡权益分类
+ */
+ indexNav(id) {
+ wx.$api.index.classify(id).then(res=>{
+ this.setData({
+ noticeData : res.data.notice,
+ infoData : res.data.info,
+ infoItems : res.data.items,
+ content : res.data.info.content.replace(/\
{
+ if(!err.login){
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : ''
+ })
+ }
+ })
+ },
+
+ /**
+ * 须知展开收起状态
+ */
+ noticeTap() {
+ this.setData({
+ noticeShow : !this.data.noticeShow
+ })
+ },
+
+ /**
+ * 处理未登录时的转跳
+ */
+ userNav(e){
+ let id = e.currentTarget.dataset.id
+ wx.getStorage({
+ key : 'token',
+ success:res=>{
+ wx.navigateTo({
+ url: '/pages/rights/rights?rightsId=' + id
+ })
+ },
+ fail: (err) => {
+ wx.navigateTo({
+ url: "/pages/login/login"
+ })
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/classify/classify.json b/pages/classify/classify.json
new file mode 100644
index 0000000..15b8460
--- /dev/null
+++ b/pages/classify/classify.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {},
+ "navigationBarBackgroundColor": "#000000",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "卡券权益"
+}
\ No newline at end of file
diff --git a/pages/classify/classify.wxml b/pages/classify/classify.wxml
new file mode 100644
index 0000000..4b41042
--- /dev/null
+++ b/pages/classify/classify.wxml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+ {{infoData.two_title}}
+
+
+ {{infoData.three_title == null ? '' : infoData.three_title}}
+
+
+ {{infoData.two_description}}
+
+
+
+
+
+
+
+
+
+ {{noticeData}}
+
+
+
+
+
+ 卡券专区
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+ {{item.title}}
+ {{item.subtitle}}
+
+
+
+
+
+
+ 抱歉, 暂无内容
+
+
+
+
+
+
+
+
+
+
+ 购买前请仔细阅读内容介绍
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/classify/classify.wxss b/pages/classify/classify.wxss
new file mode 100644
index 0000000..b23393b
--- /dev/null
+++ b/pages/classify/classify.wxss
@@ -0,0 +1,319 @@
+/* 卡券权益 */
+.cont {
+ width: 100%;
+ overflow: hidden;
+}
+
+.contBack {
+ position: relative;
+ width: 200%;
+ height: 400rpx;
+ left: -50%;
+ text-align: center;
+ background: #000000;
+ border-radius: 0 0 100% 100%;
+ overflow: hidden;
+}
+
+.contBack::after {
+ width: 100%;
+ height: 30rpx;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ z-index: 2;
+ content: '';
+ background-image: linear-gradient(transparent, rgba(0,0,0,.25));
+}
+
+.classBack {
+ position: absolute;
+ left: 30%;
+ right: 30%;
+ width: 40%;
+ top: 40rpx;
+}
+
+.classCircle {
+ position: relative;
+}
+
+.classCircle::after,
+.contBack::before {
+ position: absolute;
+ border-radius: 50%;
+ content: '';
+ z-index: 1;
+ background-color: rgba(255,255,255,.1);
+}
+
+.classCircle::after {
+ left: 20%;
+ top: -20rpx;
+ width: 260rpx;
+ height: 260rpx;
+}
+
+.contBack::before {
+ right: 20%;
+ top: 55%;
+ width: 300rpx;
+ height: 300rpx;
+}
+
+.rightsCont {
+ position: absolute;
+ z-index: 3;
+ left: calc(30% - 2rpx);
+ right: calc(30% - 2rpx);
+ width: calc(40% + 4rpx);
+ top: 58rpx;
+}
+
+.rightsCont-title {
+ color: #63320a;
+ font-size: 60rpx;
+ margin: 60rpx 0 20rpx;
+ padding: 0 20rpx;
+ box-sizing: border-box;
+}
+
+.rightsCont-btn {
+ background-color: #f4dfcc;
+ width: 100%;
+ line-height: 70rpx;
+ font-size: 38rpx;
+ color: #2d2d2d;
+ padding: 0 20rpx;
+ box-sizing: border-box;
+}
+
+.rightsCont-tips {
+ color: #fff;
+}
+
+/* 须知 */
+.notice,
+.indexNews,
+.special {
+ border-radius: 10rpx;
+ padding: 25rpx 20rpx;
+ box-sizing: border-box;
+ background: #fff;
+ margin: 30rpx 20rpx;
+}
+
+.indexColor {
+ background: #c4c4c4;
+}
+
+.noticeTitle {
+ color: #747d86;
+ display: flex;
+ line-height: 46rpx;
+}
+
+.noticeTitle-flex {
+ flex: 1;
+ display: flex;
+ font-size: 30rpx;
+ color: #000;
+}
+
+.noticeTitle-img {
+ width: 46rpx;
+ height: 46rpx;
+ margin-right: 20rpx;
+}
+
+.noticeText {
+ font-size: 26rpx;
+ height: 0;
+ overflow: hidden;
+}
+
+.noticeText.active {
+ height: auto;
+}
+
+.noticeText-top {
+ margin: 30rpx 0 10rpx;
+ font-weight: 600;
+}
+
+.noticeText-cont {
+ line-height: 60rpx;
+}
+
+.noticeTitle-row {
+ width: 32rpx;
+ height: 32rpx;
+ margin-top: 6rpx;
+ transform:rotate(-180deg);
+}
+
+.noticeTitle-row.active {
+ transform: rotate(90deg);
+}
+
+
+/* 公告 */
+.indexNews {
+ display: flex;
+ font-size: 28rpx;
+ line-height: 46rpx;
+}
+
+.indexNews image {
+ width: 42rpx;
+ height: 42rpx;
+ margin: 4rpx 20rpx 0 0;
+}
+
+/* 卡券专区 */
+.special-list {
+ margin: 20rpx -10rpx 0;
+ flex-wrap: wrap;
+ display: flex;
+}
+
+.special-label {
+ margin: 10rpx;
+ width: calc(50% - 20rpx);
+ height: 330rpx;
+ flex: 0 0 calc(50% - 20rpx);
+ border: 4rpx solid #fb9b00;
+ background-color: #ffe0b8;
+ border-radius: 10rpx;
+ text-align: center;
+ padding: 20rpx 0;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.special-label:last-child {
+ margin-bottom: 0;
+}
+
+.special-rebate {
+ position: absolute;
+ top: -30rpx;
+ right: 10rpx;
+ background: #fe0002;
+ color: #fff;
+ border-radius: 30rpx;
+ line-height: 52rpx;
+ height: 52rpx;
+ font-size: 26rpx;
+ padding: 0 20rpx;
+ font-weight: 600;
+}
+
+.welfareCont-top{
+ white-space: nowrap;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-around;
+ width: 100%;
+ padding: 0 10rpx;
+ box-sizing: border-box;
+ margin: 10rpx 0;
+}
+
+.welfareCont-list-img {
+ border: 2rpx solid #eccc69;
+ border-radius: 50%;
+ width: 100rpx;
+ height: 100rpx;
+ display: inline-block;
+ margin: 0 10rpx;
+ overflow: hidden;
+}
+
+.welfareCont-list-img image {
+ width: 100%;
+ height: 100%;
+}
+
+
+.special-text {
+ padding: 0 15rpx;
+ box-sizing: border-box;
+ position: relative;
+ font-size: 26rpx;
+ border-top: 4rpx dashed #fb9b00;
+ margin-top: 20rpx;
+ padding-top: 20rpx;
+}
+
+.special-name {
+ color: #6f4a2d;
+ font-weight: 600;
+ font-size: 28rpx;
+}
+
+.special-tips {
+ background-color: #242424;
+ color: #fff;
+ border-radius: 10rpx;
+ padding: 4rpx 20rpx;
+ line-height: 46rpx;
+ height: 46rpx;
+ margin-top: 20rpx;
+ font-size: 24rpx;
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/* 滚动 */
+/*首页跑马灯效果*/
+@keyframes around {
+ from {
+ margin-left: 60rpx;
+ }
+
+ to {
+ /* var接受传入的变量 */
+ margin-left: var(--marqueeWidth--);
+ }
+}
+
+.marquee_container {
+ width: calc(100% - 40rpx);
+ overflow: hidden;
+}
+
+.marquee_container:hover {
+ /* 不起作用 */
+ animation-play-state: paused;
+}
+
+.marquee_text {
+ font-size: 28rpx;
+ display: inline-block;
+ white-space: nowrap;
+}
+
+.marquee_text.active {
+ animation-name: around;
+ animation-duration: 10s;
+ /*过渡时间*/
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+}
+
+
+/* 权益提示 */
+.legalTips {
+ text-align: center;
+ font-size: 26rpx;
+ color: #999;
+}
+
+.legalTips image {
+ width: 180rpx;
+ height: 180rpx;
+ display: block;
+ margin: 0 auto;
+}
\ No newline at end of file
diff --git a/pages/coupon/coupon.js b/pages/coupon/coupon.js
new file mode 100644
index 0000000..18a1096
--- /dev/null
+++ b/pages/coupon/coupon.js
@@ -0,0 +1,96 @@
+// pages/coupon/coupon.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ couponArr : '',
+ coupons : [],
+ count : '',
+ couponLabel : [
+ { title : "未使用", used: 0 },
+ { title : "已使用", used: 1 },
+ { title : "已过期", used: 2 }
+ ],
+ stateType : '0', //卡券状态
+ barHeight : getApp().globalData.statusBarHeight,
+ type : ''
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ type : options.type
+ })
+ },
+
+ /**
+ * tabs
+ */
+ orderTab(e){
+ if(this.data.stateType != e.currentTarget.dataset.state){
+ this.setData({
+ stateType: e.currentTarget.dataset.state
+ })
+
+ // 获取卡权益
+ this.couponInfo()
+ }
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 获取列表
+ this.couponInfo();
+ },
+
+ /**
+ * 卡券列表
+ */
+ couponInfo() {
+ wx.$api.user.coupon(this.data.stateType).then(res=>{
+ this.setData({
+ count : res.data.count,
+ coupons : res.data.list
+ })
+ })
+ },
+
+ /**
+ * 去使用卡券
+ */
+ // applyTap(e) {
+ // let id = e.currentTarget.dataset.id
+ // wx.navigateTo({
+ // url: '/pages/couponDetails/couponDetails?id=' + id
+ // })
+ // },
+
+ /**
+ * 查看优惠券分组
+ */
+ couponTap(e) {
+ let id = e.currentTarget.dataset.id,
+ status = e.currentTarget.dataset.status
+ wx.navigateTo({
+ url: '/pages/couponArr/couponArr?id=' + id + '&status=' + status
+ })
+ },
+
+ publicTap() {
+ if(this.data.type == 'couponPublic'){
+ wx.switchTab({
+ url: '/pages/user/user'
+ })
+ }else {
+ wx.navigateBack({
+ delta: 1
+ })
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/coupon/coupon.json b/pages/coupon/coupon.json
new file mode 100644
index 0000000..0de239e
--- /dev/null
+++ b/pages/coupon/coupon.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents" : {},
+ "navigationStyle" : "custom"
+}
\ No newline at end of file
diff --git a/pages/coupon/coupon.wxml b/pages/coupon/coupon.wxml
new file mode 100644
index 0000000..ad60812
--- /dev/null
+++ b/pages/coupon/coupon.wxml
@@ -0,0 +1,71 @@
+
+
+
+
+
+ {{item.title}}
+ ({{count.init}}张)
+ ({{count.used}}张)
+ ({{count.pass}}张)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+ {{item.startTime}} 至 {{item.endTime}}
+ 活动来源: {{item.activity_name}}
+ 使用时间:{{item.used_at}}
+
+
+
+ 去使用
+
+
+
+
+
+
+
+
+
+ 查看全部{{item.count}}张卡券
+
+
+
+
+
+
+
+
+
+ 暂无优惠券
+
\ No newline at end of file
diff --git a/pages/coupon/coupon.wxss b/pages/coupon/coupon.wxss
new file mode 100644
index 0000000..95086d2
--- /dev/null
+++ b/pages/coupon/coupon.wxss
@@ -0,0 +1,247 @@
+.publicHeader {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 9;
+ width: 100%;
+ height: 90px;
+ display: flex;
+ line-height: 44px;
+ background: #fff;
+ text-align: center;
+}
+
+.publicHeader-icon {
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ left: 20rpx;
+ z-index: 9;
+ margin-top: 12px;
+}
+
+.publicHeader-title {
+ width: 100%;
+ text-align: center;
+}
+
+/* 优惠券 */
+.couponTab {
+ display: flex;
+ background: #fff;
+ position: fixed;
+ width: 100%;
+ left: 0;
+ height: 100rpx;
+ top: 90px;
+ z-index: 99;
+}
+
+.couponTab-label {
+ flex: 3;
+ text-align: center;
+ position: relative;
+ padding: 10rpx 0 0;
+ font-size: 26rpx;
+}
+
+.couponTab-label::after {
+ position: absolute;
+ content: '';
+ left: calc(50% - 20rpx);
+ bottom: 0;
+ width: 40rpx;
+ background: transparent;
+ height: 6rpx;
+ border-radius: 30%;
+}
+
+.couponTab-label.active {
+ color: #f57e32
+}
+
+.couponTab-label.active::after {
+ background: #f57e32
+}
+
+.couponTab-label view {
+ font-size: 24rpx;
+ margin-top: 6rpx;
+}
+
+
+/* 列表 */
+.coupon {
+ margin-top: 170px;
+}
+
+.couponCont {
+ margin: 0 20rpx 20rpx;
+ width: calc(100% - 40rpx);
+ border-radius: 10rpx;
+ overflow: hidden;
+}
+
+.couponList {
+ background: #fff;
+ width: 100%;
+ height: 160rpx;
+ position: relative;
+}
+
+.couponList-left {
+ position: relative;
+ left: 0;
+ top: 0;
+ width: 160rpx;
+ height: 160rpx;
+}
+
+.couponList-img {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+
+.couponList-icon {
+ position: absolute;
+ left: calc(50% - 56rpx);
+ top: calc(50% - 50rpx);
+ z-index: 2;
+ width: 100rpx;
+ height: 100rpx;
+ background: #fff;
+ border-radius: 50%;
+ padding: 20rpx;
+ box-sizing: border-box;
+}
+
+.couponList-icon image {
+ width: 100%;
+ height: 100%;
+}
+
+.couponList-center {
+ position: absolute;
+ left: 180rpx;
+ top: 35rpx;
+ width: calc(100% - 330rpx);
+}
+
+.couponList-center.active {
+ top: 15rpx;
+}
+
+.couponList-title {
+ margin-bottom: 10rpx;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.couponList-time,
+.couponList-used {
+ font-size: 24rpx;
+ color: grey;
+}
+
+.couponList-used {
+ margin-top: 14rpx;
+ color: grey;
+}
+
+.couponList-right {
+ background: #ee8e44;
+ color: #fff;
+ border-radius: 30rpx;
+ width: 110rpx;
+ text-align: center;
+ height: 50rpx;
+ line-height: 50rpx;
+ position: absolute;
+ right: 20rpx;
+ top: 55rpx;
+ font-size: 24rpx;
+}
+
+.couponList-right.active {
+ background: #dddddd;
+}
+
+.couponMore {
+ font-size: 28rpx;
+ color: #686868;
+ position: relative;
+ height: 120rpx;
+}
+
+.couponMore::after,
+.couponMore::before {
+ position: absolute;
+ content: '';
+ height: 20rpx;
+ border-radius: 10rpx;
+ background: #fff;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, .1);
+ z-index: 1;
+ height: 30rpx;
+}
+
+.couponMore::after {
+ width: calc(100% - 40rpx);
+ top: 70rpx;
+ left: 20rpx;
+}
+
+.couponMore::before {
+ width: calc(100% - 80rpx);
+ top: 90rpx;
+ left: 40rpx;
+}
+
+.couponMore-text {
+ display: flex;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ z-index: 99;
+ height: 80rpx;
+ border-radius: 0 0 10rpx 10rpx;
+ line-height: 80rpx;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ background: #fff;
+ box-shadow: 0 0 10rpx rgba(0, 0, 0, .1);
+}
+
+.couponMore-title {
+ flex: 1;
+}
+
+.couponMore-arrow {
+ width: 28rpx;
+ height: 28rpx;
+ margin-top: 26rpx;
+}
+
+.couponCont.active .couponList-img,
+.couponCont.active .couponList-icon {
+ -webkit-filter: grayscale(100%);
+ -moz-filter: grayscale(100%);
+ -ms-filter: grayscale(100%);
+ -o-filter: grayscale(100%);
+ filter: grayscale(100%);
+ filter: gray;
+}
+
+.coupoTips {
+ position: absolute;
+ top: 22rpx;
+ right: 20rpx;
+ z-index: 99;
+ width: 120rpx;
+ height: 120rpx;
+}
\ No newline at end of file
diff --git a/pages/couponArr/couponArr.js b/pages/couponArr/couponArr.js
new file mode 100644
index 0000000..51856a7
--- /dev/null
+++ b/pages/couponArr/couponArr.js
@@ -0,0 +1,78 @@
+// pages/couponArr/couponArr.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ id : '',
+ status : '',
+ couponArr : '', //卡券组列表
+ page : 1, //分页
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ id : options.id,
+ status : options.status
+ })
+
+ // 获取卡券组列表
+ this.couponInfo();
+ },
+
+ /**
+ * 卡券组列表
+ */
+ couponInfo(page) {
+ wx.$api.user.couponArr(this.data.id, this.data.status, page || '').then(res=>{
+ let listArr = this.data.couponArr,
+ newData = []
+ if(page == 1 || page == undefined) listArr = []
+
+ newData = listArr.concat(res.data.data)
+ this.setData({
+ couponArr : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+ // 获取团购列表
+ this.couponInfo();
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.couponInfo(pageNumber)
+ }
+ }
+
+ /**
+ * 去使用卡券
+ */
+ // applyTap(e) {
+ // let id = e.currentTarget.dataset.id
+ // wx.navigateTo({
+ // url: '/pages/couponDetails/couponDetails?id=' + id
+ // })
+ // }
+})
\ No newline at end of file
diff --git a/pages/couponArr/couponArr.json b/pages/couponArr/couponArr.json
new file mode 100644
index 0000000..977aa6f
--- /dev/null
+++ b/pages/couponArr/couponArr.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "我的卡券"
+}
\ No newline at end of file
diff --git a/pages/couponArr/couponArr.wxml b/pages/couponArr/couponArr.wxml
new file mode 100644
index 0000000..55ac026
--- /dev/null
+++ b/pages/couponArr/couponArr.wxml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+ {{item.startTime}} 至 {{item.endTime}}
+ 活动来源: {{item.activity_name}}
+ 使用时间:{{item.used_at}}
+
+
+
+ 去使用
+
+
+
+
+
+
+
+
+
+ 查看全部{{item.count}}张卡券
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+
+ 暂无优惠券
+
\ No newline at end of file
diff --git a/pages/couponArr/couponArr.wxss b/pages/couponArr/couponArr.wxss
new file mode 100644
index 0000000..874341a
--- /dev/null
+++ b/pages/couponArr/couponArr.wxss
@@ -0,0 +1,173 @@
+
+/* 列表 */
+.coupon {
+ margin: 20rpx 0;
+}
+
+.couponCont {
+ margin: 0 20rpx 20rpx;
+ width: calc(100% - 40rpx);
+ border-radius: 10rpx;
+ overflow: hidden;
+}
+
+.couponList {
+ background: #fff;
+ width: 100%;
+ height: 160rpx;
+ position: relative;
+}
+
+.couponList-left {
+ position: relative;
+ left: 0;
+ top: 0;
+ width: 160rpx;
+ height: 160rpx;
+}
+
+.couponList-img {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+
+.couponList-icon {
+ position: absolute;
+ left: calc(50% - 56rpx);
+ top: calc(50% - 50rpx);
+ z-index: 2;
+ width: 100rpx;
+ height: 100rpx;
+ background: #fff;
+ border-radius:50%;
+ padding: 20rpx;
+ box-sizing: border-box;
+}
+
+.couponList-icon image {
+ width: 100%;
+ height: 100%;
+}
+
+.couponList-center {
+ position: absolute;
+ left: 180rpx;
+ top: 35rpx;
+ width: calc(100% - 330rpx);
+}
+
+.couponList-center.active {
+ top: 15rpx;
+}
+
+.couponList-title {
+ margin-bottom: 10rpx;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.couponList-time, .couponList-used {
+ font-size: 24rpx;
+ color: grey;
+}
+
+.couponList-used {
+ margin-top: 14rpx;
+}
+
+.couponList-right {
+ background: #ee8e44;
+ color: #fff;
+ border-radius: 30rpx;
+ width: 110rpx;
+ text-align: center;
+ height: 50rpx;
+ line-height: 50rpx;
+ position: absolute;
+ right: 20rpx;
+ top: 55rpx;
+ font-size: 24rpx;
+}
+
+.couponList-right.active {
+ background: #dddddd;
+}
+
+.couponMore {
+ font-size: 28rpx;
+ color: #686868;
+ position: relative;
+ height: 120rpx;
+}
+
+.couponMore::after, .couponMore::before {
+ position: absolute;
+ content: '';
+ height: 20rpx;
+ border-radius: 10rpx;
+ background: #fff;
+ box-shadow: 0 0 20rpx rgba(0, 0,0, .1);
+ z-index: 1;
+ height: 30rpx;
+}
+
+.couponMore::after {
+ width: calc(100% - 40rpx);
+ top: 70rpx;
+ left: 20rpx;
+}
+
+.couponMore::before {
+ width: calc(100% - 80rpx);
+ top: 90rpx;
+ left: 40rpx;
+ }
+
+.couponMore-text {
+ display: flex;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ z-index: 99;
+ height: 80rpx;
+ border-radius: 0 0 10rpx 10rpx;
+ line-height: 80rpx;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ background: #fff;
+ box-shadow: 0 0 10rpx rgba(0, 0,0, .1);
+}
+
+.couponMore-title {
+ flex: 1;
+}
+
+.couponMore-arrow {
+ width: 28rpx;
+ height: 28rpx;
+ margin-top: 26rpx;
+}
+
+
+.couponCont.active .couponList-img, .couponCont.active .couponList-icon {
+ -webkit-filter: grayscale(100%);
+ -moz-filter: grayscale(100%);
+ -ms-filter: grayscale(100%);
+ -o-filter: grayscale(100%);
+ filter: grayscale(100%);
+ filter: gray;
+}
+
+.coupoTips {
+ position: absolute;
+ top: 22rpx;
+ right: 20rpx;
+ z-index: 99;
+ width: 120rpx;
+ height: 120rpx;
+}
\ No newline at end of file
diff --git a/pages/couponDetails/couponDetails.js b/pages/couponDetails/couponDetails.js
new file mode 100644
index 0000000..c120611
--- /dev/null
+++ b/pages/couponDetails/couponDetails.js
@@ -0,0 +1,170 @@
+// pages/couponDetails/couponDetails.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ id : 0, //优惠券id
+ longitude : 0, //经度
+ latitude : 0, //纬度
+ details : '', //优惠券信息
+ stores : [], //商家列表
+ content : '', //内容介绍
+ remark : '', //使用须知
+ qrcode : '', //二维码
+ barcode : '', //条形码
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+
+ onLoad (options) {
+
+ // 优惠券id
+ this.setData({
+ id :options.id
+ })
+
+ // 获取二维码
+ this.detailsCode()
+
+ // 获取条形码
+ this.detailsBarcode()
+
+ // 获取详情信息
+ this.detailsInfo();
+
+ },
+
+ onShow(){
+ // 检查定位是否为空
+ if(this.data.latitude == 0 && this.data.longitude == 0){
+ wx.getSetting({
+ success: res=>{
+ this.getCity()
+ }
+ })
+ }
+ },
+
+ /**
+ * 获取城市信息
+ */
+ getCity(){
+ wx.getLocation({
+ type : 'wgs84',
+ success : res=> {
+ this.setData({
+ longitude : res.longitude,
+ latitude : res.latitude
+ })
+
+ // 获取详情信息
+ this.detailsInfo();
+ }
+ })
+ },
+
+ /**
+ * 二维码
+ */
+ detailsCode() {
+ let coupon_id = this.data.id
+ wx.$api.user.qrcode(coupon_id).then(res=>{
+ this.setData({
+ qrcode : res.data.qrcode
+ })
+ })
+ },
+
+ /**
+ * 条形码
+ */
+ detailsBarcode() {
+ let coupon_id = this.data.id
+ wx.$api.user.barcode(coupon_id).then(res=>{
+ this.setData({
+ barcode : res.data.barcode
+ })
+ })
+ },
+
+ /**
+ * 详情信息
+ */
+ detailsInfo() {
+ let coupon_id = this.data.id,
+ user_lng = this.data.longitude,
+ user_lat = this.data.latitude
+ wx.$api.user.couponinfo(coupon_id, user_lng, user_lat).then(res=>{
+ let stores = res.data.stores
+ stores.map(res=>{
+ let distance = res.distance
+ if(res.distance > 1000){
+ distance = (distance / 1000) + "km"
+ }else{
+ distance = distance + "m"
+ }
+ res.km = distance
+ })
+
+ this.setData({
+ details : res.data.info,
+ stores : stores,
+ remark : res.data.info.right.remark.replace(/\
{
+ if(res.tapIndex==0){
+ wx.makePhoneCall({
+ phoneNumber: tel
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 查看门店详情页
+ */
+ detailsTap(e) {
+ let store_id = e.currentTarget.dataset.id,
+ user_lng = this.data.longitude,
+ user_lat = this.data.latitude
+
+ wx.navigateTo({
+ url: '/pages/storeDetails/storeDetails?store_id=' + store_id + '&user_lng=' + user_lng + '&user_lat=' + user_lat,
+ })
+ },
+
+ /**
+ * 加入微信卡包
+ */
+ join(e) {
+ let cardId = this.data.id
+ wx.$api.user.jssdk(cardId).then(res=>{
+ let pay = JSON.parse(res.data)
+ wx.addCard({
+ cardList : pay,
+ success : res => {
+ // 获取详情信息
+ this.detailsInfo();
+ },fail : res=> {
+ }
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/couponDetails/couponDetails.json b/pages/couponDetails/couponDetails.json
new file mode 100644
index 0000000..57e13af
--- /dev/null
+++ b/pages/couponDetails/couponDetails.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "卡券详情"
+}
\ No newline at end of file
diff --git a/pages/couponDetails/couponDetails.wxml b/pages/couponDetails/couponDetails.wxml
new file mode 100644
index 0000000..6fc4948
--- /dev/null
+++ b/pages/couponDetails/couponDetails.wxml
@@ -0,0 +1,97 @@
+
+
+
+
+ {{details.name}}
+
+
+ 有效期: {{details.startTime}} - {{details.endTime}}
+
+
+ 活动来源 : {{details.activity_name}}
+
+ 劵码
+
+
+
+ {{details.code}}
+
+
+
+
+ 请出示以上券码给网点工作人员
+
+
+ {{details.is_get == true ? '已加入微信卡包':'加入微信卡包'}}
+
+
+
+
+
+
+
+ 适用门店
+
+
+ 查看所有
+
+
+
+
+
+ 您尚未授权本时生活开启定位服务
+ 不能看到附近的商家哦,点击下方按钮开启
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.address}}
+ {{item.km}}
+
+
+
+
+
+
+
+
+
+ 暂无门店
+
+
+
+
+
+
+
+
+
+ 使用须知
+
+
+
+
+
+
+
+
+
+
+ 内容介绍
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/couponDetails/couponDetails.wxss b/pages/couponDetails/couponDetails.wxss
new file mode 100644
index 0000000..82d7ede
--- /dev/null
+++ b/pages/couponDetails/couponDetails.wxss
@@ -0,0 +1,215 @@
+/* 卡券详情 */
+.details {
+ background: #fff;
+ margin: 20rpx;
+ width: calc(100% - 40rpx);
+ border-radius: 20rpx;
+ padding: 30rpx;
+ box-sizing: border-box;
+ box-shadow: 0 0 20rpx rgba(0, 0,0, .1);
+}
+
+.detailsTop {
+ border-bottom: 2rpx dashed #c8c8c8;
+ padding-bottom: 40rpx;
+}
+
+.detailsTop-name {
+ font-size: 36rpx;
+ font-weight: 600;
+ margin-bottom: 20rpx;
+}
+
+.detailsTop-time {
+ color: #7e7e7e;
+ font-size: 26rpx;
+}
+
+.detailsCode {
+ text-align: center;
+ padding: 0 0 20rpx;
+ margin: 40rpx 0 30rpx;
+}
+
+.detailsCode image {
+ width: 300rpx;
+ height: 300rpx;
+ margin-bottom: 30rpx;
+}
+
+.detailsCode-text, .detailsStore-row {
+ color: #949494;
+ font-size: 28rpx;
+}
+
+.detailsCode-text {
+ text-align: center;
+ font-size: 32rpx;
+ font-weight: 600;
+ color: #000;
+}
+
+.detailsCode-text text {
+ color: #999;
+ font-weight: normal;
+ font-size: 26rpx;
+}
+
+.detailsStore {
+ border-top: 2rpx #c8c8c8 solid;
+ padding-top: 40rpx;
+}
+
+.detailsStore-top, .detailsStore-row {
+ display: flex;
+ line-height: 30rpx;
+ margin-bottom: 20rpx;
+}
+
+.detailsStore-title {
+ flex: 1;
+ font-weight: 600;
+}
+
+.detailsStore-row image {
+ width: 26rpx;
+ height: 26rpx;
+ margin: 3rpx 0 0 6rpx;
+}
+
+.detailsStore-list {
+ position: relative;
+ margin-bottom: 40rpx;
+}
+
+.detailsStore-list:last-child {
+ margin-bottom: 0;
+}
+
+.detailsStore-logo {
+ width: 100rpx;
+ height: 100rpx;
+ border-radius: 10rpx;
+}
+
+.detailsStore-cont {
+ position: absolute;
+ left: 130rpx;
+ top: 0;
+ width: calc(100% - 130rpx);
+ display: flex;
+}
+
+.detailsStore-left {
+ width: calc(100% - 90rpx);
+ margin-right: 30rpx;
+}
+
+.detailsStore-tel {
+ width: 60rpx;
+ height: 60rpx;
+ margin-top: 25rpx;
+}
+
+.detailsStore-place {
+ font-size: 24rpx;
+ line-height: 40rpx;
+ color: #5a5a5a;
+ display: flex;
+}
+
+.detailsStore-place text {
+ flex: 1;
+ display: inline-block;
+ font-size: 28rpx;
+ margin-right: 20rpx;
+}
+
+
+.detailsStore-name {
+ margin-bottom: 20rpx;
+}
+
+.detailsText {
+ padding: 30rpx 30rpx 20rpx;
+ box-sizing: border-box;
+}
+
+.detailsText-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ margin-bottom: 20rpx;
+}
+
+.detailsText-tips {
+ font-size: 26rpx;
+ line-height: 50rpx;
+ color: #555557;
+ padding-bottom: 20rpx;
+}
+
+.detailsCode-join {
+ color: #ee8e44;
+ font-size: 24rpx;
+ border-radius: 50rpx;
+ border: 2rpx solid #ee8e44;
+ padding: 10rpx 20rpx;
+ display: inline-block;
+ margin-top: 30rpx;
+}
+
+.detailsCode-join.active {
+ border: 2rpx solid #999;
+ color: #999;
+}
+
+.source{
+ margin: 30rpx 0;
+ font-size: 28rpx;
+}
+
+.location {
+ background: white;
+ width: 100%;
+ text-align: center;
+ margin: 60rpx 0 0;
+}
+
+.location text {
+ font-size: 28rpx;
+ display: block;
+ line-height: 46rpx;
+ color: #999;
+}
+
+.location-btn[size="mini"] {
+ background-color: #ee8e44;
+ color: #fff;
+ font-size: 26rpx;
+ line-height: 66rpx;
+ margin-top: 30rpx;
+}
+
+.location-img {
+ width: 150rpx;
+ height: 120rpx;
+ margin-bottom: 20rpx;
+}
+
+.detailsBar {
+ text-align: center;
+ padding: 0 50rpx;
+ box-sizing: border-box;
+ margin-top: 60rpx;
+ margin-bottom: 40rpx;
+}
+
+
+.detailsBar image {
+ width: 100%;
+}
+
+.detailsBar .detailsCode-text {
+ margin-bottom: 10px;
+ color: #000;
+}
\ No newline at end of file
diff --git a/pages/frozen/frozen.js b/pages/frozen/frozen.js
new file mode 100644
index 0000000..725a08e
--- /dev/null
+++ b/pages/frozen/frozen.js
@@ -0,0 +1,40 @@
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ type : '', //类型
+ frozenData : [], //数组列表
+ blockeds : '', //待发放金额
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ type : options.type,
+ blockeds : options.blockeds
+ })
+ // 获取冻结列表
+ this.frozenInfo()
+ },
+
+ /**
+ * 冻结列表
+ */
+ frozenInfo() {
+ wx.$api.user.ungrants(this.data.type).then(res=>{
+ this.setData({
+ frozenData: res.data
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/frozen/frozen.json b/pages/frozen/frozen.json
new file mode 100644
index 0000000..aa6068c
--- /dev/null
+++ b/pages/frozen/frozen.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "待发放"
+}
\ No newline at end of file
diff --git a/pages/frozen/frozen.wxml b/pages/frozen/frozen.wxml
new file mode 100644
index 0000000..25b4fb9
--- /dev/null
+++ b/pages/frozen/frozen.wxml
@@ -0,0 +1,28 @@
+
+
+
+ 待发放(额度)
+ {{blockeds}}
+
+ 待发放期数详情
+ 共 {{frozenData.length}} 期
+
+
+ 分期
+
+
+ 第{{item.num}}期
+ 发放时间:{{item.start_at}}
+
+
+ +{{item.variable}}
+ 发放额度
+
+
+
+
+
+
+
+ 抱歉,目前暂无内容~
+
\ No newline at end of file
diff --git a/pages/frozen/frozen.wxss b/pages/frozen/frozen.wxss
new file mode 100644
index 0000000..adcbeee
--- /dev/null
+++ b/pages/frozen/frozen.wxss
@@ -0,0 +1,101 @@
+/* 待发放 */
+.frozenTop {
+ background: #3e3c37;
+ color: #e7e4d5;
+ margin: 20rpx;
+ padding: 40rpx;
+ box-sizing: border-box;
+ border-radius: 20rpx;
+ font-size: 34rpx;
+ position: relative;
+ overflow: hidden;
+}
+
+.frozenTop-number {
+ font-size: 40rpx;
+ font-weight: 600;
+ margin-top: 30rpx;
+}
+
+.frozenTop-tips {
+ position: absolute;
+ top: 0;
+ right: 0;
+ background: #030200;
+ color: #fff;
+ font-size: 28rpx;
+ padding: 12rpx 20rpx;
+ border-radius: 0 0 20rpx 20rpx;
+ display: flex;
+}
+
+.frozenTop-tips image {
+ width: 30rpx;
+ height: 30rpx;
+ margin: 4rpx 10rpx 0 0;
+}
+
+.frozenTop-btn {
+ position: absolute;
+ top: 110rpx;
+ right: 40rpx;
+ background: #dab684;
+ color: #fff;
+ font-size: 28rpx;
+ border-radius: 80rpx;
+ padding: 8rpx 30rpx;
+}
+
+.frozenCont {
+ background-color: #fff;
+ margin: 30rpx 20rpx;
+ border-radius: 20rpx;
+ font-size: 36rpx;
+}
+
+.frozenTitle {
+ padding: 20rpx;
+ box-sizing: border-box;
+ color: #9c9c9c;
+}
+
+.frozenList {
+ padding: 20rpx;
+ display: flex;
+ font-size: 32rpx;
+}
+
+.frozenList-left {
+ flex: 1;
+ line-height: 50rpx;
+}
+
+.frozenList-number {
+ line-height: 50rpx;
+ text-align: center;
+}
+
+.frozenList-name {
+ display: flex;
+}
+
+.frozenList-name image {
+ width: 32rpx;
+ height: 32rpx;
+ margin: 10rpx 10rpx 0 0;
+}
+
+.frozenList-time {
+ padding-left: 40rpx;
+}
+
+.frozenList-variable,
+.frozenList-time {
+ font-size: 26rpx;
+ color: #aaaaaa;
+}
+
+.frozenList-yellow {
+ color: #317afa;
+ font-weight: 600;
+}
\ No newline at end of file
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..e060074
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,240 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ swiperCurrent :0,
+ current :0, //轮播图当前的下标
+ dots :true,
+ cityAll : '',
+ statusBarHeight : getApp().globalData.systInfo.statusBarHeight,
+ longitude : 0, //经度
+ latitude : 0, //纬度
+ adverts : [], //轮播图
+ stateType : "silver",
+ cardArr : [], //权益数组
+ activities : [], //周五福利
+ isUser : false, //用户登录状态
+ noticeData : '', //首页公告
+ loading : true, //骨架屏加载
+ address : {
+ city: "", //市
+ area: "", //区
+ city_code: "", //市编号
+ area_code: "" //区编号
+ }
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ this.locaTion()
+ // 获取用户登录状态
+ this.setData({
+ isUser : getApp().globalData.isUser
+ })
+ },
+
+ /**
+ * 获取位置
+ */
+ locaTion(){
+ wx.getLocation({
+ success: res => {
+ this.setData({
+ latitude : res.latitude,
+ longitude : res.longitude
+ })
+
+ },
+ complete: () => {
+ // 获取卡权益
+ this.indexInfo();
+ }
+ })
+ },
+
+ /**
+ * 卡权益
+ */
+ indexInfo() {
+ if(this.data.stateType == 'shaky') {
+ wx.$api.index.index(this.data.city, this.data.longitude, this.data.latitude).then(res=>{
+ this.setData({
+ adverts : res.data.adverts,
+ cardArr : res.data.rights,
+ activities : res.data.activities,
+ noticeData : res.data.notice,
+ loading : false,
+ address : {
+ city: res.data.location.city_name,
+ area: res.data.location.district_name || "",
+ city_code: res.data.location.city_id,
+ area_code: res.data.location.district_id || ""
+ }
+ })
+ wx.stopPullDownRefresh()
+ }).catch(err=>{
+ if(!err.login){
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : ''
+ })
+ }
+ })
+ } else {
+ wx.$api.index.choice(this.data.stateType,this.data.city, this.data.longitude, this.data.latitude).then(res=>{
+ this.setData({
+ adverts : res.data.adverts,
+ cardArr : res.data.categorys,
+ noticeData : res.data.notice,
+ cityName : res.data.city_name,
+ loading : false,
+ address : {
+ city: res.data.location.city_name,
+ area: res.data.location.district_name || "",
+ city_code: res.data.location.city_id,
+ area_code: res.data.location.district_id || ""
+ }
+ })
+
+ wx.stopPullDownRefresh()
+ }).catch(err=>{
+ if(!err.login){
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : ''
+ })
+ }
+ })
+ }
+ },
+
+
+ /**
+ * tabs
+ */
+ orderTab(e){
+ if(this.data.stateType != e.currentTarget.dataset.state){
+ this.setData({
+ stateType: e.currentTarget.dataset.state
+ })
+ // 获取卡权益
+ this.indexInfo()
+
+ // 重置轮播图
+ this.setData({
+ current : 0,
+ swiperCurrent: 0
+ });
+ }
+ },
+
+ /**
+ * 处理未登录时的转跳
+ */
+ userNav(e){
+ let id = e.currentTarget.dataset.id
+ wx.getStorage({
+ key : 'token',
+ success:res=>{
+ wx.navigateTo({
+ url: '/pages/classify/classify?id=' + id
+ })
+ },
+ fail: (err) => {
+ wx.navigateTo({
+ url: "/pages/login/login"
+ })
+ }
+ })
+ },
+
+ /**
+ * 点击图片放大
+ */
+ clickImg(e) {
+ if(e.currentTarget.dataset.img == "") return
+ let imgUrl = [e.currentTarget.dataset.img]
+ wx.previewImage({
+ urls : imgUrl, //需要预览的图片http链接列表,注意是数组
+ current : imgUrl[0] // 当前显示图片的http链接,默认是第一个
+ })
+ },
+
+ /**
+ * 周五福利抢购
+ */
+ Snapup(e) {
+ let canBuy = e.currentTarget.dataset.can,
+ canText = e.currentTarget.dataset.text,
+ canId = e.currentTarget.dataset.id
+ if(!canBuy) {
+ wx.showToast({
+ title : canText,
+ icon : 'none',
+ duration: 2000
+ })
+ return
+ }
+
+ // 跳转分类页
+ wx.navigateTo({
+ url: '/pages/welfare/welfare?id=' + canId
+ })
+ },
+
+ /**
+ * 活动中心权益跳转详情
+ */
+ rightNav(e) {
+ let id = e.currentTarget.dataset.id
+ wx.getStorage({
+ key : 'token',
+ success:res=>{
+ wx.navigateTo({
+ url: '/pages/rights/rights?id=' + id
+ })
+ },
+ fail: (err) => {
+ wx.navigateTo({
+ url: "/pages/login/login"
+ })
+ }
+ })
+ },
+
+ /**
+ * 下拉刷新
+ */
+ onPullDownRefresh(){
+ // 获取卡权益
+ this.indexInfo();
+ this.locaTion();
+ },
+
+ /**
+ * 防止swiper控件卡死
+ */
+ swiperChange(e){
+ if (this.data.current == 0 && this.data.swiperCurrent>1 ) {//卡死时,重置current为正确索引
+ this.setData({ current: this.data.swiperCurrent });
+ }
+ else {//正常轮转时,记录正确页码索引
+ this.setData({ swiperCurrent: e.detail.current });
+ }
+
+ }
+})
\ No newline at end of file
diff --git a/pages/index/index.json b/pages/index/index.json
new file mode 100644
index 0000000..2d21589
--- /dev/null
+++ b/pages/index/index.json
@@ -0,0 +1,10 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "",
+ "navigationBarBackgroundColor": "#000000",
+ "backgroundColor": "#f4f4f4",
+ "navigationBarTextStyle": "white",
+ "navigationStyle" : "custom",
+ "backgroundTextStyle" : "dark",
+ "enablePullDownRefresh" : true
+}
\ No newline at end of file
diff --git a/pages/index/index.skeleton.wxml b/pages/index/index.skeleton.wxml
new file mode 100644
index 0000000..f3b4dfc
--- /dev/null
+++ b/pages/index/index.skeleton.wxml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+ 哈尔滨市南岗区
+
+
+
+
+
+ 活动中心
+
+ 白金会员
+
+ 钻石会员
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 您的预约已成功,请点击继续办理
+
+
+
+
+
+
+ 抱歉, 此地区暂无权益
+
+
+
+
+ 周五会员福利日
+
+
+
+
+
+
+ 15
+ 元
+
+ 全车型洗车券
+
+
+
+
+ 每周五:
+ 08:00:00 开抢
+ [限量100份] [剩余97份]
+
+
+
+ 抢
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/index.skeleton.wxss b/pages/index/index.skeleton.wxss
new file mode 100644
index 0000000..be722ac
--- /dev/null
+++ b/pages/index/index.skeleton.wxss
@@ -0,0 +1,94 @@
+/*
+此文件为开发者工具生成,生成时间: 2021/4/22 下午3:55:40
+
+在 H:\工作项目\亿时代-本时生活-2021-04-13\本时生活\pages\index\index.wxss 中引入样式
+```
+@import "./index.skeleton.wxss";
+```
+
+更多详细信息可以参考文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/skeleton.html
+*/
+.sk-transparent {
+ color: transparent !important;
+ }
+.sk-text-30-0000-789 {
+ background-image: linear-gradient(transparent 30.0000%, #EEEEEE 0%, #EEEEEE 70.0000%, transparent 0%) !important;
+ background-size: 100% 80.0000rpx;
+ position: relative !important;
+ }
+.sk-text {
+ background-origin: content-box !important;
+ background-clip: content-box !important;
+ background-color: transparent !important;
+ color: transparent !important;
+ background-repeat: repeat-y !important;
+ }
+.sk-text-32-2222-11 {
+ background-image: linear-gradient(transparent 32.2222%, #EEEEEE 0%, #EEEEEE 67.7778%, transparent 0%) !important;
+ background-size: 100% 90.0000rpx;
+ position: relative !important;
+ }
+.sk-text-32-2222-270 {
+ background-image: linear-gradient(transparent 32.2222%, #EEEEEE 0%, #EEEEEE 67.7778%, transparent 0%) !important;
+ background-size: 100% 90.0000rpx;
+ position: relative !important;
+ }
+.sk-text-14-2857-898 {
+ background-image: linear-gradient(transparent 14.2857%, #EEEEEE 0%, #EEEEEE 85.7143%, transparent 0%) !important;
+ background-size: 100% 39.2000rpx;
+ position: relative !important;
+ }
+.sk-text-14-2857-980 {
+ background-image: linear-gradient(transparent 14.2857%, #EEEEEE 0%, #EEEEEE 85.7143%, transparent 0%) !important;
+ background-size: 100% 39.2000rpx;
+ position: relative !important;
+ }
+.sk-text-14-2857-662 {
+ background-image: linear-gradient(transparent 14.2857%, #EEEEEE 0%, #EEEEEE 85.7143%, transparent 0%) !important;
+ background-size: 100% 39.2000rpx;
+ position: relative !important;
+ }
+.sk-text-14-2857-553 {
+ background-image: linear-gradient(transparent 14.2857%, #EEEEEE 0%, #EEEEEE 85.7143%, transparent 0%) !important;
+ background-size: 100% 39.2000rpx;
+ position: relative !important;
+ }
+.sk-text-13-6364-777 {
+ background-image: linear-gradient(transparent 13.6364%, #EEEEEE 0%, #EEEEEE 86.3636%, transparent 0%) !important;
+ background-size: 100% 44.0000rpx;
+ position: relative !important;
+ }
+.sk-text-13-6364-28 {
+ background-image: linear-gradient(transparent 13.6364%, #EEEEEE 0%, #EEEEEE 86.3636%, transparent 0%) !important;
+ background-size: 100% 44.0000rpx;
+ position: relative !important;
+ }
+.sk-text-22-7273-273 {
+ background-image: linear-gradient(transparent 22.7273%, #EEEEEE 0%, #EEEEEE 77.2727%, transparent 0%) !important;
+ background-size: 100% 44.0000rpx;
+ position: relative !important;
+ }
+.sk-image {
+ background: #EFEFEF !important;
+ }
+.sk-pseudo::before, .sk-pseudo::after {
+ background: #EFEFEF !important;
+ background-image: none !important;
+ color: transparent !important;
+ border-color: transparent !important;
+ }
+.sk-pseudo-rect::before, .sk-pseudo-rect::after {
+ border-radius: 0 !important;
+ }
+.sk-pseudo-circle::before, .sk-pseudo-circle::after {
+ border-radius: 50% !important;
+ }
+.sk-container {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ background-color: transparent;
+ }
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..a951715
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+ {{address.city}}{{address.area}}
+
+
+
+
+
+
+
+
+ 活动中心
+
+ 白金会员
+
+ 钻石会员
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{noticeData}}
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+ {{item.label}}
+
+
+
+
+
+ 抱歉, 此地区暂无权益
+
+
+
+
+
+
+ 周五会员福利日
+
+
+
+
+
+ {{item.price}} 元
+ {{item.title}}
+
+
+
+
+ 每周五:
+ {{item.start_time}} 开抢
+ {{item.end_time}} 结束
+ [限量{{item.stock}}份] [剩余{{item.surplus}}份]
+
+
+
+ 抢
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+ {{item.label}}
+
+
+
+
+
+ 抱歉, 此地区暂无权益
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..177c5b0
--- /dev/null
+++ b/pages/index/index.wxss
@@ -0,0 +1,544 @@
+/* 首页 */
+page {
+ background: #fff;
+}
+
+.indexTab {
+ position: fixed;
+ display: flex;
+ width: 100%;
+ height: 90rpx;
+ line-height: 90rpx;
+ z-index: 999;
+ padding: 0 40rpx;
+ top: 80rpx;
+ box-sizing: border-box;
+ background-color: #07081d;
+}
+
+.indexTab-lable {
+ text-align: center;
+ flex: 3;
+ color: #fff;
+ position: relative;
+}
+
+.indexTab-lable.active {
+ background-image: -webkit-linear-gradient(left, #e4dab7, #d9b672);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-weight: 600;
+ font-size: 38rpx;
+}
+
+/* 轮播图 */
+.indexBanner {
+ height: 360rpx;
+ position: relative;
+ padding-top: 20rpx;
+}
+
+.indexBanner::after {
+ position: absolute;
+ left: 0;
+ top: 0;
+ height: 240rpx;
+ width: 100%;
+ content: '';
+ background: #07081d;
+ border-radius: 0 0 200rpx 200rpx;
+}
+
+.banner {
+ position: relative;
+ padding-top: 48%;
+ width: calc(100% - 100rpx);
+ background: white;
+ margin: 0 50rpx;
+ border-radius: 30rpx;
+ overflow: hidden;
+ z-index: 99;
+}
+
+.banner-swiper {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.banner-img {
+ width: 100%;
+ height: 100%;
+ vertical-align: top;
+}
+
+/* 指示点 */
+.dots {
+ margin: 30rpx 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+}
+
+.dots view {
+ width: 14rpx;
+ height: 14rpx;
+ margin: 0 6rpx;
+ border-radius: 50%;
+ background-color: #c5c5c5;
+}
+
+.dots .active {
+ width: 24rpx;
+ border-radius: 40rpx;
+ background-color: #f46851;
+}
+
+/* 提示 */
+.indexNews {
+ background: #dddddd;
+ padding: 25rpx 40rpx;
+ display: flex;
+ font-size: 28rpx;
+}
+
+.indexNews image {
+ width: 34rpx;
+ height: 34rpx;
+ margin: 4rpx 20rpx 0 0;
+}
+
+/* 权益列表 */
+.cardArr {
+ padding: 40rpx 30rpx 30rpx;
+ box-sizing: border-box;
+ overflow: hidden;
+}
+
+.cardArr-top {
+ flex-wrap: wrap;
+ display: flex;
+}
+
+.indexCard {
+ width: 33.33%;
+ text-align: center;
+ position: relative;
+ flex: 0 0 33.3333%;
+ margin-bottom: 40rpx;
+}
+
+.indexCard-img {
+ width: 140rpx;
+ height: 140rpx;
+ border-radius: 50%;
+}
+
+.activity-tips {
+ position: absolute;
+ top: -10rpx;
+ right: 10rpx;
+ z-index: 9;
+ background-image: -webkit-linear-gradient(left, #ff0000, #ff0000);
+ color: #fff;
+ font-size: 24rpx;
+ padding: 0 18rpx;
+ height: 40rpx;
+ line-height: 40rpx;
+ border-radius: 20rpx;
+ animation: zy 2.5s .15s linear infinite;
+ -moz-animation: zy 2.5s .15s linear infinite;
+ -webkit-animation: zy 2.5s .15s linear infinite;
+ -o-animation: zy 2.5s .15s linear infinite;
+}
+
+.indexCard-tips {
+ background-image: -webkit-linear-gradient(left, #ef354c, #ef001e);
+ color: #fff300;
+ height: 34rpx;
+ line-height: 32rpx;
+ padding: 0 10rpx;
+ right: 25rpx;
+}
+
+@keyframes zy {
+ 10% {
+ transform: rotate(15deg);
+ }
+
+ 20% {
+ transform: rotate(-10deg);
+ }
+
+ 30% {
+ transform: rotate(5deg);
+ }
+
+ 40% {
+ transform: rotate(-5deg);
+ }
+
+ 50%,
+ 100% {
+ transform: rotate(0deg);
+ }
+}
+
+.indexCard-title {
+ font-weight: 600;
+ margin: 5rpx 20rpx;
+ font-size: 30rpx;
+}
+
+.indexCard-remark {
+ font-size: 26rpx;
+ color: #8a8a8a;
+}
+
+/* 新增活动权利列表样式 */
+.activity-remark {
+ background-color: #000000;
+ display: inline-block;
+ border-radius: 40rpx;
+ height: 38rpx;
+ line-height: 38rpx;
+ padding: 0 10rpx;
+}
+
+.activity-remark text {
+ display: block;
+ background-image: -webkit-linear-gradient(left, #e4dab7, #d9b672);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-size: 22rpx;
+}
+
+
+/* 定位 */
+
+.locationPicker {
+ background: #000;
+ color: #fff;
+ height: 80rpx;
+ line-height: 80rpx;
+ position: fixed;
+ width: 100%;
+ z-index: 1009;
+ top: 0;
+ left: 0;
+}
+
+.locationPicker-icon {
+ width: 38rpx;
+ height: 38rpx;
+ float: left;
+ vertical-align: middle;
+ margin: 22rpx 10rpx 0 20rpx;
+}
+
+.locationPicker-region-icon {
+ width: 44rpx;
+ height: 44rpx;
+ margin-top: 12rpx;
+}
+
+.cityCont {
+ width: 60%;
+ display: flex;
+}
+
+.cityCont view {
+ max-width: calc(100% - 50rpx);
+}
+
+.cityCont image {
+ width: 50rpx;
+ height: 50rpx;
+ margin-top: 16rpx;
+}
+
+/* 权益提示 */
+.legalTips {
+ text-align: center;
+ font-size: 28rpx;
+ color: #999;
+ padding: 80rpx;
+ margin: 0 auto;
+}
+
+.legalTips image {
+ width: 240rpx;
+ height: 180rpx;
+ display: block;
+ margin: 0 auto 40rpx;
+}
+
+/* 滚动 */
+/*首页跑马灯效果*/
+@keyframes around {
+ from {
+ margin-left: 60rpx;
+ }
+
+ to {
+ /* var接受传入的变量 */
+ margin-left: var(--marqueeWidth--);
+ }
+}
+
+.marquee_container {
+ width: calc(100% - 40rpx);
+ overflow: hidden;
+}
+
+.marquee_container:hover {
+ /* 不起作用 */
+ animation-play-state: paused;
+}
+
+.marquee_text {
+ font-size: 28rpx;
+ display: inline-block;
+ white-space: nowrap;
+}
+
+.marquee_text.active {
+ animation-name: around;
+ animation-duration: 20s;
+ /*过渡时间*/
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+}
+
+/* 福利日 */
+
+.Welfare {
+ text-align: center;
+}
+
+.WelfareTitle {
+ display: inline-block;
+ background-color: #020202;
+ border-radius: 20rpx 20rpx 10rpx 10rpx;
+ height: 68rpx;
+ line-height: 68rpx;
+ padding: 0 50rpx;
+}
+
+.WelfareTitle text,
+.WelfareList-btn text {
+ background-image: -webkit-linear-gradient(left, #e4dab7, #d9b672);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+.WelfareTitle text {
+ font-weight: 600;
+ font-size: 38rpx;
+}
+
+.WelfareList {
+ background-color: #020202;
+ border-radius: 20rpx;
+ padding: 40rpx 30rpx;
+ box-sizing: border-box;
+ position: relative;
+ overflow: hidden;
+}
+
+.WelfareList::after {
+ position: absolute;
+ content: '';
+ top: -60rpx;
+ right: 0;
+ background-image: -moz-linear-gradient(right, rgba(255, 255, 255, .2), rgba(0, 0, 0, 0));
+ background-image: -webkit-linear-gradient(right, rgba(255, 255, 255, .2), rgba(0, 0, 0, 0));
+ background-image: linear-gradient(right, rgba(255, 255, 255, .2), rgba(0, 0, 0, 0));
+ width: 200rpx;
+ height: 200rpx;
+ border-radius: 50%;
+}
+
+.WelfareList-back {
+ position: relative;
+ width: 100%;
+ height: 220rpx;
+ padding: 30rpx;
+ box-sizing: border-box;
+ margin-bottom: 40rpx;
+}
+
+.WelfareList-back:last-child {
+ margin: 0;
+}
+
+.WelfareList-img {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+
+.WelfareList-img.active {
+ -webkit-filter: grayscale(100%);
+ -moz-filter: grayscale(100%);
+ -ms-filter: grayscale(100%);
+ -o-filter: grayscale(100%);
+ filter: grayscale(100%);
+ filter: gray;
+}
+
+.WelfareList-left,
+.WelfareList-right,
+.WelfareList-btn {
+ position: absolute;
+ z-index: 2;
+ left: 0;
+}
+
+.WelfareList-left {
+ top: -4rpx;
+ width: 180rpx;
+ font-weight: 600;
+ display:table;
+ height: 226rpx;
+}
+
+.cell {
+ display:table-cell;
+ vertical-align:middle;
+}
+
+.WelfareList-left-title {
+ font-size: 28rpx;
+ word-break:normal;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+}
+
+.WelfareList-left .WelfareList-left-price {
+ font-size: 40rpx;
+}
+
+.WelfareList-left text {
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.WelfareList-right {
+ line-height: 44rpx;
+ width: 100%;
+ padding-left: 200rpx;
+ padding-right: 160rpx;
+ box-sizing: border-box;
+ text-align: left;
+ display: flex;
+}
+
+.WelfareList-cont {
+ width: 100%;
+ margin-top: -8rpx;
+}
+
+.WelfareList-btn {
+ left: auto;
+ top: 55rpx;
+ right: 30rpx;
+ background-color: #020202;
+ width: 110rpx;
+ height: 110rpx;
+ text-align: center;
+ line-height: 110rpx;
+ border-radius: 50%;
+ overflow: hidden;
+}
+
+.WelfareList-btn::after {
+ position: absolute;
+ content: '';
+ top: -50rpx;
+ left: 0;
+ background-image: -moz-linear-gradient(right, rgba(255, 255, 255, .25), rgba(0, 0, 0, 0));
+ background-image: -webkit-linear-gradient(right, rgba(255, 255, 255, .25), rgba(0, 0, 0, 0));
+ background-image: linear-gradient(right, rgba(255, 255, 255, .25), rgba(0, 0, 0, 0));
+ width: 100rpx;
+ height: 100rpx;
+ border-radius: 50%;
+}
+
+.WelfareList-btn.active {
+ background-color: #9c9c9c;
+}
+
+.WelfareList-btn.active::before {
+ position: absolute;
+ content: '';
+ width: 100%;
+ height: 4rpx;
+ background-color: #cecece;
+ left: 0;
+ top: 50%;
+ transform:rotate(45deg);
+}
+
+.WelfareList-btn.active text {
+ background-image: -moz-linear-gradient(#c3c3c3);
+ background-image: -webkit-linear-gradient(#c3c3c3);
+ background-image: linear-gradient(#c3c3c3);
+ -webkit-text-fill-color: #c3c3c3;
+}
+
+
+.WelfareList-btn text {
+ font-weight: 600;
+ font-size: 54rpx;
+}
+
+.WelfareList-all {
+ font-size: 24rpx;
+}
+
+.WelfareList-text {
+ font-size: 28rpx;
+}
+
+.light {
+ cursor: pointer;
+ position: absolute;
+ left: -100%;
+ top: 0;
+ width: 40px;
+ height: 100%;
+ background: rgba(255, 255, 255, 0);
+ transform: skewx(25deg);
+ -webkit-transition: all .5s ease-in;
+ -moz-transition: all .5s ease-in;
+ -o-transition: all .5s ease-in;
+ transition: all .5s ease-in;
+ animation-name: example;
+ animation-duration: 3.5s;
+ animation-iteration-count: infinite;
+}
+
+
+@keyframes example {
+ 0% {
+ left: -100%;
+ background: rgba(255, 255, 255, .4);
+ }
+
+ 50% {
+ left: -50%;
+ background: rgba(255, 255, 255, .7);
+ }
+
+ 100% {
+ left: 100%;
+ background: rgba(255, 255, 255, 0);
+ }
+}
\ No newline at end of file
diff --git a/pages/login/login.js b/pages/login/login.js
new file mode 100644
index 0000000..5c792e3
--- /dev/null
+++ b/pages/login/login.js
@@ -0,0 +1,124 @@
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ isLogin : false,
+ loginCode : "", //code
+ userInfo : {}, //用户
+ iv : '',
+ encryptedData : '',
+ way : '' //登录方式-活动
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ // 登录方式-活动
+ this.setData({
+ way : options.way
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ wx.login({
+ success: res => {
+ this.setData({
+ loginCode: res.code
+ })
+ }
+ })
+ },
+
+ /**
+ * 登录
+ */
+ userInfo(e){
+ if(e.detail.errMsg == "getUserInfo:ok"){
+ this.setData({
+ isLogin : true,
+ userInfo : e.detail.rawData,
+ iv : e.detail.iv,
+ encryptedData : e.detail.encryptedData
+ })
+
+ // 检查用户登录Code是否过期
+ wx.checkSession({
+ success: res=>{
+ this.userLogin()
+ },
+ fail: err=>{
+ // 登录过期重新获取code
+ wx.login({
+ success: res=>{
+ this.setData({
+ loginCode: res.code
+ })
+ // 登录
+ this.userLogin()
+ }
+ })
+ }
+ })
+ }else{
+ wx.showToast({
+ title: '拒绝了登录授权',
+ icon : 'none'
+ })
+ }
+ },
+
+ /**
+ * 用户登录
+ */
+ userLogin(){
+ let code = this.data.loginCode,
+ iv = this.data.iv,
+ encryptedData = this.data.encryptedData
+
+ wx.$api.enroll.record(code, iv, encryptedData).then(res=>{
+ getApp().globalData.token = res.data.token
+
+ // 更新全局存储器用户状态
+ getApp().globalData.isUser = true
+
+
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : res.data.token
+ })
+
+ // 存入缓存
+ app.globalData.userInfo = res.data.users
+ app.globalData.wechatUser = res.data.wechatUser_id
+
+ this.setData({
+ isLogin: false
+ })
+
+ wx.navigateTo({
+ url: "/pages/chooseTel/chooseTel?way=" + this.data.way
+ })
+
+ // 写入缓存
+ wx.setStorage({
+ key : 'users',
+ data : res.data.users
+ })
+ })
+ }
+
+})
\ No newline at end of file
diff --git a/pages/login/login.json b/pages/login/login.json
new file mode 100644
index 0000000..c67fc7a
--- /dev/null
+++ b/pages/login/login.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "微信授权",
+ "navigationBarBackgroundColor": "#000000",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/login/login.wxml b/pages/login/login.wxml
new file mode 100644
index 0000000..d72aee6
--- /dev/null
+++ b/pages/login/login.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/login/login.wxss b/pages/login/login.wxss
new file mode 100644
index 0000000..e36d466
--- /dev/null
+++ b/pages/login/login.wxss
@@ -0,0 +1,36 @@
+/* 登录 */
+
+page {
+ background: #000;
+}
+
+.loginImg {
+ position: relative;
+ height: 100vh;
+ width: 100%;
+}
+
+.loginImg image {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.loginBtn[size="mini"]{
+ background: #33f800;
+ color: #000;
+ width: 240rpx;
+ height: 86rpx;
+ line-height: 76rpx;
+ border-radius: 30rpx;
+ position: absolute;
+ bottom: 5vh;
+ left: calc(50% - 120rpx);
+ padding: 0;
+ margin: 0;
+ border: 4rpx solid #fff;
+ box-sizing: border-box;
+ font-size: 36rpx;
+}
\ No newline at end of file
diff --git a/pages/order/order.js b/pages/order/order.js
new file mode 100644
index 0000000..03542ff
--- /dev/null
+++ b/pages/order/order.js
@@ -0,0 +1,149 @@
+// pages/activityOrder/activityOrder.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ stateType : 'all', //状态
+ counts : '', //数量
+ orderArr : [], //列表
+ page : {}, //下一页
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ stateType: options.stateType
+ })
+ },
+
+ onShow() {
+ // 获取商品活动订单
+ this.orderInfo();
+ },
+
+ /**
+ * 商品活动订单
+ */
+ orderInfo(page) {
+ wx.$api.exchange.index(this.data.stateType, page).then(res=>{
+ let listArr = this.data.orderArr,
+ newData = []
+ if(page == 1 || page == undefined) listArr = []
+
+ newData = listArr.concat(res.data.data)
+ this.setData({
+ counts : res.data.count,
+ orderArr : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * tabs
+ */
+ orderTab(e){
+ if(this.data.stateType != e.currentTarget.dataset.state){
+ this.setData({
+ stateType: e.currentTarget.dataset.state
+ })
+
+ // 获取商品活动订单
+ this.orderInfo()
+
+ wx.pageScrollTo({
+ scrollTop: 0
+ })
+ }
+ },
+
+ /**
+ * 取消订单
+ */
+ orderDelete(e) {
+ let orderId = e.currentTarget.dataset.id
+ wx.showModal({
+ title : '订单取消',
+ content : '确认取消吗?',
+ success : res=> {
+ if (res.confirm) {
+ wx.$api.exchange.cancel(orderId).then(res=>{
+ // 获取商品活动订单
+ this.orderInfo()
+
+ wx.showToast({
+ title: res.data,
+ icon : 'none'
+ })
+ })
+ } else if (res.cancel) {
+ wx.showToast({
+ title : '取消',
+ icon : 'loading',
+ duration: 1000
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 支付提交
+ */
+ orderPay(e) {
+ let orderid = e.currentTarget.dataset.id
+ wx.$api.exchange.payments(orderid).then(res=>{
+ wx.$api.index.wechat(res.data.trade_no).then(res=>{
+ let payInfo = JSON.parse(res.data)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/coupon/coupon?type=couponPublic'
+ })
+ },2000)
+ }
+ },
+ fail : res=>{
+ wx.redirectTo({
+ url: '/pages/order/order?stateType=unpay'
+ })
+ }
+ })
+ })
+ })
+
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.orderInfo(pageNumber)
+ }
+ }
+
+})
\ No newline at end of file
diff --git a/pages/order/order.json b/pages/order/order.json
new file mode 100644
index 0000000..a06e085
--- /dev/null
+++ b/pages/order/order.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "兑换订单"
+}
\ No newline at end of file
diff --git a/pages/order/order.wxml b/pages/order/order.wxml
new file mode 100644
index 0000000..6960b6f
--- /dev/null
+++ b/pages/order/order.wxml
@@ -0,0 +1,70 @@
+
+
+
+ 全部
+
+
+ 待支付
+
+
+
+ 待发货
+
+
+
+
+ 已发货
+
+
+
+
+
+
+
+
+
+ {{item.orderid}}
+ {{item.state_text}}
+ {{item.state_text}}
+ {{item.state_text}}
+
+
+
+
+ {{item.items.title}}
+
+ 红包电子券
+ 实物券
+
+
+ ¥{{item.items.price}} × {{item.items.qty}}
+
+
+
+
+ 订单详情
+ 取消订单
+ 立即支付
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+ 暂无订单
+
\ No newline at end of file
diff --git a/pages/order/order.wxss b/pages/order/order.wxss
new file mode 100644
index 0000000..8a11503
--- /dev/null
+++ b/pages/order/order.wxss
@@ -0,0 +1,241 @@
+/*
+ * 亿时代
+ */
+
+ .order-tab {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ display: flex;
+ height: 80rpx;
+ line-height: 80rpx;
+ z-index: 9;
+ background: white;
+}
+
+.order-tab-item {
+ font-size: 28rpx;
+ width: 25%;
+ text-align: center;
+ border-bottom: solid 2rpx #f7f7f7;
+ color: #464854;
+ background: white;
+ position: relative;
+}
+
+.order-tab-item.active {
+ color: #f57e32;
+}
+
+.order-tab-item::after {
+ content: '';
+ position: absolute;
+ width: 30rpx;
+ height: 4rpx;
+ background: transparent;
+ left: calc(50% - 15rpx);
+ bottom: -2rpx;
+}
+
+.order-tab-item.active::after {
+ background: #f57e32;
+}
+
+.state-tips {
+ position: absolute;
+ top: 10rpx;
+ right: 14rpx;
+ background: #e92706;
+ color: #fff;
+ font-size: 24rpx;
+ transform: scale(.7, .7);
+ border-radius: 60rpx 60rpx 60rpx 0;
+ width: 48rpx;
+ height: 34rpx;
+ line-height: 34rpx;
+}
+
+/* 订单列表 */
+
+.order-content {
+ padding: 80rpx 0 20rpx 0;
+}
+
+.order-content-li {
+ background: white;
+ margin-top: 20rpx;
+ position: relative;
+}
+
+.order-name {
+ background: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ border-bottom: solid 1rpx #f3f3f3;
+ display: flex;
+}
+
+.order-name image {
+ background: linear-gradient(#000, #000);
+ background-blend-mode: lighten;
+ background-size: cover;
+ width: 26rpx;
+ height: 26rpx;
+ border-radius: 50%;
+ margin: 8rpx 14rpx 0 0;
+}
+
+.order-store {
+ padding: 20rpx;
+ border-bottom: solid 1rpx #f3f3f3;
+ display: flex;
+}
+
+.order-goods-tips {
+ display: flex;
+}
+
+.order-goods-tips text {
+ display: inline-block;
+ background: #e92706;
+ color: #fff;
+ border-radius: 20rpx;
+ padding: 0 20rpx;
+ height: 42rpx;
+ line-height: 42rpx;
+ font-size: 24rpx;
+ transform: scale(.8, .8);
+}
+
+text.order-goods-tips-color {
+ background: #e6b329;
+}
+
+.order-store-stateText {
+ color: #e6b329;
+ font-size: 26rpx;
+}
+
+.order-store-stateText.red {
+ color: #e92344;
+}
+
+.order-store-stateText.green {
+ color: #79b300;
+}
+
+.order-store-title {
+ flex: 1;
+ color: #999;
+ font-size: 28rpx;
+}
+
+.order-store-orderid {
+ color: #747788;
+ font-size: 25rpx;
+}
+
+.order-store-title text {
+ color: white;
+ font-size: 24rpx;
+ background: #e92344;
+ margin-right: 10rpx;
+ padding: 0 10rpx;
+}
+
+.order-goods {
+ padding: 20rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.order-goods-cover {
+ width: 150rpx;
+ height: 150rpx;
+ vertical-align: top;
+ border-radius: 4rpx;
+}
+
+.order-goods-content {
+ position: absolute;
+ left: 190rpx;
+ top: 20rpx;
+ right: 20rpx;
+ width: calc(100% - 210rpx);
+}
+
+.order-goods-content-name {
+ margin-bottom: 10rpx;
+ font-size: 30rpx;
+ font-weight: 600;
+}
+
+.order-goods-content-price {
+ color: #747788;
+ display: flex;
+ margin-top: 10rpx;
+ font-size: 28rpx;
+}
+
+.order-goods-content-price text {
+ color: #f57e32;
+ display: inline-block;
+ margin-right: 10rpx;
+ font-size: 30rpx;
+}
+
+.order-total {
+ padding: 20rpx;
+ box-sizing: border-box;
+ font-size: 26rpx;
+ line-height: 50rpx;
+ color: #747788;
+ display: flex;
+}
+
+.order-total view {
+ margin-right: 30rpx;
+}
+
+.order-total text {
+ color: #e92344;
+ font-weight: bold;
+}
+
+.order-btns {
+ font-size: 25rpx;
+ display: flex;
+ padding: 20rpx;
+ box-sizing: border-box;
+ flex-wrap: wrap;
+ flex-direction: row-reverse;
+}
+
+.order-btn {
+ margin-left: 20rpx;
+ height: 52rpx;
+ line-height: 50rpx;
+ box-sizing: border-box;
+ border: solid 1rpx #747788;
+ padding: 0 20rpx;
+ border-radius: 30rpx;
+}
+
+.order-btn-back {
+ border-color: #f57e32;
+ color: #f57e32;
+}
+
+.orderVirtual {
+ background: #f57e32;
+ color: #fff;
+ border-radius: 4rpx;
+ display: inline-block;
+ font-size: 24rpx;
+ padding: 2rpx 8rpx
+}
+
+.orderVirtual.active {
+ background: #88be2d;
+}
\ No newline at end of file
diff --git a/pages/orderData/orderData.js b/pages/orderData/orderData.js
new file mode 100644
index 0000000..03debea
--- /dev/null
+++ b/pages/orderData/orderData.js
@@ -0,0 +1,134 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ statusHeight : app.globalData.statusBarHeight,
+ order : '' //订单详情
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ // 获取商品活动订单详情
+ this.orderInfo(options.id);
+ },
+
+ /**
+ * 商品活动订单详情
+ */
+ orderInfo(id) {
+ wx.$api.exchange.show(id).then(res=>{
+ this.setData({
+ order : res.data
+ })
+ })
+ },
+
+ /**
+ * 取消订单
+ */
+ orderDelete(e) {
+ let orderId = e.currentTarget.dataset.id
+ wx.showModal({
+ title : '订单取消',
+ content : '确认取消吗?',
+ success : res=> {
+ if (res.confirm) {
+ wx.$api.exchange.cancel(orderId).then(res=>{
+ wx.reLaunch({
+ url: '/pages/order/order'
+ })
+
+ wx.showToast({
+ title: res.data,
+ icon : 'none'
+ })
+ })
+ } else if (res.cancel) {
+ wx.showToast({
+ title : '取消',
+ icon : 'loading',
+ duration: 1000
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 支付提交
+ */
+ orderPay(e) {
+ let orderid = e.currentTarget.dataset.id
+ wx.$api.exchange.payments(orderid).then(res=>{
+ wx.$api.index.wechat(res.data.trade_no).then(res=>{
+ let payInfo = JSON.parse(res.data)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/coupon/coupon?type=couponPublic'
+ })
+ },2000)
+ }
+ },
+ fail : res=>{
+ wx.reLaunch({
+ url: '/pages/order/order?stateType=unpay'
+ })
+ }
+ })
+ })
+ })
+
+ },
+
+ /**
+ * 返回上一页
+ */
+ orderRun() {
+ wx.navigateBack({
+ delta: 1
+ })
+ },
+
+ /**
+ * 复制快递单号
+ */
+ copyText (e) {
+ let text = e.currentTarget.dataset.text
+ wx.setClipboardData({
+ data : text,
+ success : res=> {
+ wx.getClipboardData({
+ success: res => {
+ wx.showToast({
+ title: '复制成功'
+ })
+ }
+ })
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/orderData/orderData.json b/pages/orderData/orderData.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/orderData/orderData.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/orderData/orderData.wxml b/pages/orderData/orderData.wxml
new file mode 100644
index 0000000..5b93712
--- /dev/null
+++ b/pages/orderData/orderData.wxml
@@ -0,0 +1,63 @@
+
+
+ {{order.state_text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 收货人:{{order.express.name}}
+ {{order.express.mobile}}
+
+ {{order.express.address}}
+
+
+
+
+
+
+
+ {{order.items.title}}
+ ¥{{order.items.price}}
+ ×{{order.items.qty}}
+
+
+
+
+
+
+
+ 权益类型
+ {{order.type_text}}
+
+
+ 订单号
+ {{order.orderid}}
+
+
+ 下单时间
+ {{order.created_at}}
+
+
+
+
+ 实际支付
+ ¥{{order.amount}}
+
+
+
+
\ No newline at end of file
diff --git a/pages/orderData/orderData.wxss b/pages/orderData/orderData.wxss
new file mode 100644
index 0000000..ccf95fa
--- /dev/null
+++ b/pages/orderData/orderData.wxss
@@ -0,0 +1,241 @@
+
+/*
+ * 亿时代
+ */
+ .order-statl{
+ background-color: #f57e32;
+ padding: 0 30rpx 10rpx;
+ color: white;
+ line-height: 90rpx;
+ height: 90rpx;
+ position: relative;
+}
+
+.order-statl-icon{
+ width: 80rpx;
+ height: 80rpx;
+ vertical-align: middle;
+ position: absolute;
+ right: 30rpx;
+ top: 5rpx;
+}
+
+ /* 收货人信息 */
+.order-address{
+ padding: 30rpx 30rpx 40rpx 100rpx;
+ position: relative;
+ background: white;
+}
+
+.order-address-back{
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ vertical-align:bottom;
+}
+
+.order-address-name{
+ padding-right: 300rpx;
+ position: relative;
+ font-size: 33rpx;
+ padding-bottom: 10rpx;
+}
+
+.order-address-name text{
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 280rpx;
+ text-align: right;
+}
+
+.order-address-text{
+ color: #464854;
+ font-size: 26rpx;
+}
+
+.address-icon,
+.arrows-right{
+ position: absolute;
+}
+
+.address-icon{
+ height: 42rpx;
+ width: 42rpx;
+ left: 30rpx;
+ top: calc(50% - 26rpx);
+ top: -webkit-calc(50% - 26rpx);
+}
+
+.arrows-right{
+ height: 28rpx;
+ width: 28rpx;
+ right: 30rpx;
+ top: calc(50% - 19rpx);
+ top: -webkit-calc(50% - 19rpx);
+}
+
+.order-add-address{
+ text-align: center;
+ padding: 30rpx 0;
+}
+
+.order-add-address navigator{
+ display: inline-block;
+ background: #e92344;
+ color: white;
+ line-height: 60rpx;
+ padding: 0 30rpx;
+ margin-right: 20rpx;
+}
+
+/* 订单商品 */
+
+.order-content{
+ border-bottom: solid 100rpx transparent;
+}
+
+.order-goods{
+ margin-bottom: 20rpx;
+}
+
+.goods-goods-mall{
+ padding: 20rpx 30rpx 0 30rpx;
+ line-height: 50rpx;
+}
+
+.goods-goods-mall image{
+ width: 48rpx;
+ height: 48rpx;
+ vertical-align: middle;
+ margin-right: 15rpx;
+ margin-bottom: 2rpx;
+}
+
+.goods-goods-li{
+ padding: 20rpx 30rpx;
+ position: relative;
+ border-bottom: solid 1rpx #f2f2f2;
+ min-height: 130rpx;
+ background: white;
+}
+
+.goods-goods-li:last-child{
+ border-bottom: none;
+}
+
+.goods-img{
+ position: absolute;
+ top: 20rpx;
+ left: 30rpx;
+ height: 130rpx;
+ width: 130rpx;
+ background: #f5f6fa;
+}
+
+.goods-body{
+ padding-left: 150rpx;
+}
+
+.goods-name{
+ font-weight: bold;
+ padding: 10rpx 0 20rpx;
+}
+
+.goods-price{
+ color: #e92344;
+}
+
+.goods-qty{
+ color: gray;
+ font-weight: normal;
+ padding-left: 10rpx;
+ font-size: 28rpx;
+}
+
+.goods-params{
+ color: gray;
+ padding-bottom: 20rpx;
+ font-size: 28rpx;
+}
+
+/* 统计信息 */
+
+.order-total{
+ background: white;
+ margin: 20rpx 0;
+}
+
+.order-total-li{
+ padding: 0 30rpx;
+ line-height: 90rpx;
+ position: relative;
+ font-size: 28rpx;
+}
+
+.order-total-li::before{
+ position: absolute;
+ content: " ";
+ left: 30rpx;
+ bottom: 0;
+ right: 0;
+ height: 1rpx;
+ background: #f2f2f2;
+}
+
+.order-total-li:last-child::before{
+ display: none;
+}
+
+.order-total-li text{
+ float: right;
+ color: #999;
+}
+
+.order-total-li .redCor {
+ color: #e92344;
+ font-size: 32rpx;
+}
+
+.order-type text {
+ color: #e92344;
+}
+
+/* 底部工具栏 */
+.order-data-footer{
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ border-top: solid 1rpx #f2f2f2;
+ padding-top: 17rpx;
+ padding-right: 30rpx;
+ padding-left: 30rpx;
+ height: 83rpx;
+ background: white;
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction:row-reverse;
+}
+
+.order-data-footer.iphoneX {
+ padding-bottom: 30rpx;
+}
+
+.order-btn{
+ margin-left: 20rpx;
+ height: 54rpx;
+ line-height: 50rpx;
+ box-sizing: border-box;
+ border:solid 1rpx #747788;
+ padding: 0 20rpx;
+ font-size: 26rpx;
+ border-radius: 40rpx;
+ margin-top: 10rpx;
+}
+
+.order-btn-back {
+ border-color: #f57e32;
+ color: #f57e32;
+}
\ No newline at end of file
diff --git a/pages/packet/packet.js b/pages/packet/packet.js
new file mode 100644
index 0000000..528c03e
--- /dev/null
+++ b/pages/packet/packet.js
@@ -0,0 +1,140 @@
+// pages/packet/packet.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ mobile : '', //手机号码
+ code : '',
+ iscode : null, //用于存放验证码接口里获取到的code
+ codename : '获取验证码',
+ countDownNum: '',
+ popContHide : false, //领取成功弹出
+ popData : '', //领取金额
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+
+ },
+
+ /**
+ * 获取手机号码
+ */
+ getNameValue(e) {
+ this.setData({
+ mobile: e.detail.value
+ })
+ },
+
+ /**
+ * 获取验证码
+ */
+ getCodeValue(e) {
+ this.setData({
+ code: e.detail.value
+ })
+ },
+
+ /**
+ * code
+ */
+ codeBind(e){
+ let mobile = this.data.mobile,
+ myreg = /^(14[0-9]|13[0-9]|15[0-9]|17[0-9]|18[0-9])\d{8}$$/
+
+ var _this = this
+
+ if (mobile == "") {
+ wx.showToast({
+ title : '手机号不能为空',
+ icon : 'none',
+ duration : 1000
+ })
+ return false;
+ }else if (!myreg.test(mobile)) {
+ wx.showToast({
+ title : '请输入正确的手机号',
+ icon : 'none',
+ duration : 1000
+ })
+ return false;
+ }else{
+ wx.$api.user.send(mobile,'DEFAULT','unicom').then(res=>{
+ wx.showToast({
+ title : '发送成功',
+ icon : 'success',
+ duration: 2000
+ })
+ var num = 61;
+ var timer = setInterval(function () {
+ num--;
+ if (num <= 0) {
+ clearInterval(timer);
+ _this.setData({
+ codename : '重新发送',
+ disabled : false
+ })
+
+ } else {
+ _this.setData({
+ codename : num + "s后重新获取",
+ disabled : true
+ })
+ }
+ }, 1000)
+ })
+ }
+ },
+
+ /**
+ * 立即领取
+ */
+ forgetlogin(e) {
+ let mobile = this.data.mobile,
+ code = this.data.code,
+ that = this,
+ countDownNum = 5 //获取倒计时初始值
+
+ that.setData({
+ countDownNum: countDownNum
+ })
+
+ wx.$api.user.unicom(mobile,'DEFAULT',code).then(res=>{
+ that.setData({
+ popContHide : !this.data.popContHide,
+ popData : res.data
+ })
+ var timerPop = setInterval(function () {
+ countDownNum--;
+ that.setData({
+ countDownNum: countDownNum
+ })
+ if (countDownNum <= 0) {
+ clearInterval(timerPop);
+ that.setData({
+ countDownNum: 0
+ })
+ wx.switchTab({
+ url: '/pages/user/user'
+ })
+ }
+ }, 1000)
+ })
+ },
+
+ /**
+ * 关闭弹窗
+ */
+ popContHide() {
+ this.setData({
+ popContHide : !this.data.popContHide
+ })
+ wx.switchTab({
+ url: '/pages/user/user'
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/packet/packet.json b/pages/packet/packet.json
new file mode 100644
index 0000000..fa7e476
--- /dev/null
+++ b/pages/packet/packet.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents" : {},
+ "navigationBarTitleText": "联通红包"
+}
\ No newline at end of file
diff --git a/pages/packet/packet.wxml b/pages/packet/packet.wxml
new file mode 100644
index 0000000..2e8b7f0
--- /dev/null
+++ b/pages/packet/packet.wxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+ 请输入办理业务手机号
+ 例:185XXXX0001
+
+
+
+
+
+
+
+
+
+ 领取成功,共领取{{popData}},可在账户中查看
+ 我知道了 ({{countDownNum}})
+
+
\ No newline at end of file
diff --git a/pages/packet/packet.wxss b/pages/packet/packet.wxss
new file mode 100644
index 0000000..2d01234
--- /dev/null
+++ b/pages/packet/packet.wxss
@@ -0,0 +1,223 @@
+/* 红包领取 */
+.packetCont-img {
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+}
+
+.packetCont-title {
+ width: 100vw;
+ position: absolute;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ text-align: center;
+ margin-top: 60rpx;
+}
+
+.packetText {
+ position: absolute;
+ top: 16%;
+ left: 40rpx;
+ right: 40rpx;
+ text-align: center;
+}
+
+.packetText-form {
+ background: rgba(255, 255, 255, .7);
+ border-radius: 30rpx;
+ padding: 40rpx 40rpx 70rpx 40rpx;
+ box-sizing: border-box;
+ color: #000;
+ text-align: left;
+ margin-bottom: 100rpx;
+ position: relative;
+}
+
+.packetText-tips {
+ margin: 0 auto;
+ display: block;
+}
+
+.packetText-title {
+ font-weight: 600;
+ font-size: 26rpx;
+ padding: 0 10rpx 40rpx 10rpx;
+}
+
+.packetText-title-name {
+ font-size: 38rpx;
+ margin-bottom: 10rpx;
+}
+
+.packetText-label {
+ background-color: #fff;
+ border-radius: 80rpx;
+ margin-bottom: 60rpx;
+ box-shadow: 0 10rpx 10rpx rgba(0, 0, 0, .4);
+ display: flex;
+ padding: 25rpx 30rpx;
+ box-sizing: border-box;
+}
+
+.packetText-label image {
+ width: 40rpx;
+ height: 40rpx;
+ margin-top: 2rpx;
+ margin-right: 30rpx;
+}
+
+.packetText-label button {
+ border: none;
+ background-color: transparent;
+ width: auto !important;
+ padding: 0;
+ font-weight: normal;
+ font-size: 32rpx;
+}
+
+.inputs-input {
+ position: relative;
+ padding-left: 30rpx;
+}
+
+.inputs-code {
+ position: relative;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ flex: 1;
+ margin-right: 30rpx;
+}
+.inputs-input::after,
+.inputs-code::after {
+ position: absolute;
+ content: '';
+ top: 0;
+ background: #000;
+ width: 4rpx;
+ height: 100%;
+}
+
+.inputs-input::after {
+ left: 0;
+}
+
+.inputs-code::after {
+ right: 0;
+}
+
+.packetText-cozy {
+ font-weight: 600;
+ font-size: 26rpx;
+}
+
+.packetText-cozy text {
+ display: block;
+ margin: 15rpx 0;
+ position: relative;
+ padding-left: 30rpx;
+}
+
+.packetText-cozy text::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 12rpx;
+ background-color: #000;
+ width: 12rpx;
+ height: 12rpx;
+ border-radius: 50%;
+}
+
+.packetText-cozy-name {
+ font-size: 34rpx;
+}
+
+.packetText-btn {
+ width: 100%;
+ text-align: center;
+ height: 90rpx;
+ position: absolute;
+ bottom: -40rpx;
+ left: 0;
+}
+
+.packetText-btn button {
+ line-height: 90rpx;
+ border-radius: 25rpx;
+ background-image: radial-gradient(#fdcf7c 50%,#fdebb8);
+ border: none;
+ font-size: 38rpx;
+ color: #fff;
+ margin: 0 auto;
+ padding: 0;
+}
+
+.packetText-btn text{
+ background: linear-gradient(to bottom, #e38b3c, #cb6418);
+ -webkit-background-clip: text;
+ color: transparent;
+}
+
+.packetText-btn image {
+ width: 34rpx;
+ height: 34rpx;
+ vertical-align: -4rpx;
+ margin-left: 14rpx;
+}
+
+/* 弹出 */
+.popBack {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background-color: rgba(0, 0, 0, .8);
+ z-index: 8;
+ display: none;
+}
+
+.popCont {
+ position: fixed;
+ z-index: 9;
+ width: 100vw;
+ height: 100vh;
+ text-align: center;
+ display: none;
+}
+
+.popCont-text {
+ padding: 0 10rpx;
+ box-sizing: border-box;
+ position: absolute;
+ z-index: 10;
+ left: 20%;
+ top: 340px;
+ width: 60%;
+}
+
+.popBack.active,
+.popCont.active {
+ display: block;
+}
+
+.popCont-name {
+ margin-bottom: 50rpx;
+ font-size: 30rpx;
+}
+
+.popCont-name text {
+ font-size: 40rpx;
+ color: #fd5238;
+ padding: 0 10rpx;
+}
+
+.popCont-btn {
+ background-color: #ffea37;
+ color: #ff3900;
+ display: inline-block;
+ border-radius: 80rpx;
+ padding: 20rpx 70rpx;
+ box-shadow: 0 10rpx 10rpx rgba(196, 160, 0, 0.4);
+}
\ No newline at end of file
diff --git a/pages/rights/rights.js b/pages/rights/rights.js
new file mode 100644
index 0000000..22cd1ae
--- /dev/null
+++ b/pages/rights/rights.js
@@ -0,0 +1,327 @@
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ address : '', //默认收货地址
+ allAddress : '', //收货地址列表
+ groupId : '', //权益id
+ detail : '', //权益详情
+ amount : '', //总金额
+ moreAmount : '', //产品金额
+ score : '', //应付总积分
+ freight : '', //运费
+ num : 1, //购买的数量
+ content : '', //内容介绍
+ notification: '', //重要提示
+ remark : '', //使用须知
+ noticeShow : false, //须知显示状态
+ addressShow : false, //收货地址显示
+ getType : '', //是否显示自提
+ platIndex : 0, //选择提交方式下标
+ isdeliver : '',
+ platformCp : [], //选择提交数组
+ pointMoreShow: false,
+ from : '',
+ typeNo : '',
+ uniUrl : '', //跳转h5页面
+ openid : '',
+ webShow : false,
+ rightsTap : false,
+ disabled : false
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ this.setData({
+ groupId : options.rightsId || options.id,
+ typeWeb : options.type,
+ getType : options.getType,
+ openid : options.openid || ''
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+ // 获取详情
+ this.rightsInfo();
+ },
+
+ /**
+ * 详情
+ */
+ rightsInfo() {
+ wx.$api.index.rightShow(this.data.groupId, this.data.address.id, this.data.num, this.data.isdeliver).then(res=>{
+ let obj = res.data.detail.express
+ let defGet = res.data.detail.def_get
+ let arr = new Array
+
+ arr = Object.keys(obj).map(val=>{
+ return { ...obj[val], ...{key: val} }
+ })
+
+ this.setData({
+ address : res.data.address,
+ allAddress : res.data.all_address,
+ detail : res.data.detail,
+ num : res.data.num,
+ freight : res.data.freight,
+ platformCp : arr,
+ from : res.data.detail.from,
+ amount : res.data.total,
+ moreAmount : res.data.amount,
+ score : res.data.score,
+ typeNo : res.data.detail.type_no,
+ remark : res.data.detail.remark.replace(/\
{
+ this.setData({
+ uniUrl : encodeURIComponent(res.data)
+ })
+ })
+ }
+ }
+ }).catch(err=>{
+ if(!err.login){
+ wx.showModal({
+ title : '用户登录已过期',
+ content : '请重新登录',
+ showCancel : false,
+ success : res => {
+ if (res.confirm) {
+ wx.redirectTo({
+ url: '/pages/login/login'
+ })
+ }
+ }
+ })
+ }
+ })
+ },
+
+ /**
+ * 商品数量加减
+ */
+ goodsNumber(e){
+ let num = this.data.num
+ if (e.currentTarget.dataset.type == 'plus'){
+ num ++;
+ }else{
+ if (num > 1){
+ num --;
+ }else{
+ wx.showToast({
+ title : '商品数量不能小于1',
+ icon : 'none'
+ })
+ }
+ }
+ this.setData({
+ num : num
+ })
+
+ // 获取详情
+ this.rightsInfo()
+ },
+ /**
+ * 输入商品数量
+ */
+ goodsNumberInput(e){
+ let goodsNum = e.detail.value
+ if (goodsNum > 0){
+ this.setData({
+ num : goodsNum
+ })
+ }else{
+ wx.showToast({
+ title : '商品数量不能小于1',
+ icon : 'none'
+ })
+ this.setData({
+ num : goodsNum
+ })
+ }
+
+ // 获取详情
+ this.rightsInfo()
+ },
+
+ /**
+ * 须知展开收起状态
+ */
+ noticeTap() {
+ this.setData({
+ noticeShow : !this.data.noticeShow
+ })
+ },
+
+ /**
+ * 选择提交方式
+ */
+ platBind(e) {
+ this.setData({
+ platIndex : e.detail.value,
+ isdeliver : this.data.platformCp[e.detail.value].value
+ })
+ // 获取详情
+ this.rightsInfo()
+ },
+
+ /**
+ * 收货地址弹出
+ */
+ addressTap() {
+ this.setData({
+ addressShow : true
+ })
+ },
+
+ /**
+ * 收货地址收起
+ */
+ addressHide() {
+ this.setData({
+ addressShow : false
+ })
+ },
+
+ /**
+ * 选择收货地址
+ */
+ selectAddress(e){
+ let new_addressId = e.currentTarget.dataset.id,
+ addressId = this.data.address.id
+ if (new_addressId != addressId) {
+ this.setData({
+ address : e.currentTarget.dataset.index,
+ addressShow : false
+ })
+ }else{
+ this.setData({
+ addressShow : false
+ })
+ }
+
+ // 获取详情
+ this.rightsInfo()
+ },
+
+ /**
+ * 普通商品支付提交
+ */
+ ordinary() {
+ this.submitOrder();
+ this.setData({
+ disabled : true
+ })
+ },
+
+ /**
+ * 只有银联商品获取
+ */
+ unionOrder() {
+ // 更新openid
+ wx.$api.index.unionCode(this.data.openid).then(res=>{})
+ this.submitOrder();
+ },
+
+ /**
+ * 支付提交
+ */
+ submitOrder() {
+ if(this.data.isdeliver.length == 0) {
+ this.setData({
+ isdeliver: this.data.detail.def_get
+ })
+ }
+ let right_id = this.data.detail.right_id,
+ address_id = this.data.address.id,
+ is_deliver = this.data.isdeliver,
+ qty = this.data.num
+
+ wx.$api.index.rightStore(right_id, address_id, is_deliver, qty).then(res=>{
+ if(res.data.canPay == false) {
+ wx.showToast({
+ title : '支付成功',
+ icon : 'success',
+ duration: 2000
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/order/order'
+ })
+ },3000)
+ this.setData({
+ rightsTap: true
+ })
+ }else {
+ wx.$api.index.wechat(res.data.trade_no).then(res=>{
+ let payInfo = JSON.parse(res.data)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/coupon/coupon?type=couponPublic'
+ })
+ },3000)
+ }
+ },
+ fail : res=>{
+ wx.reLaunch({
+ url: '/pages/order/order?stateType=unpay'
+ })
+ }
+ })
+ })
+ }
+ })
+ },
+
+
+ /**
+ * 新增收货地址
+ */
+ addSelect() {
+ wx.navigateTo({
+ url: '/pages/address/address?type=selectAddress'
+ })
+ this.setData({
+ addressShow : false
+ })
+ },
+
+ /**
+ * 新增收货地址
+ */
+ pointMoreTap() {
+ this.setData({
+ pointMoreShow : !this.data.pointMoreShow
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/rights/rights.json b/pages/rights/rights.json
new file mode 100644
index 0000000..3e0f2bc
--- /dev/null
+++ b/pages/rights/rights.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents" : {},
+ "navigationBarTitleText" : "卡券权益",
+ "navigationBarBackgroundColor": "#151619",
+ "navigationBarTextStyle" : "white"
+}
\ No newline at end of file
diff --git a/pages/rights/rights.wxml b/pages/rights/rights.wxml
new file mode 100644
index 0000000..25b8abb
--- /dev/null
+++ b/pages/rights/rights.wxml
@@ -0,0 +1,204 @@
+
+
+
+ 立即领取
+
+
+ 立即购买
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+
+
+ 重要提示
+
+
+
+
+
+ {{pointMoreShow == true ? '收起' : '展开'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{detail.four_title}}
+
+
+
+
+
+
+
+ {{detail.three_title}}
+
+
+
+
+
+
+ 数量
+
+ -
+
+ +
+
+
+
+
+
+
+ 产品金额
+ ¥{{moreAmount}}
+
+
+ 电子券
+ {{detail.qty}}张
+
+
+
+
+
+
+ 请选择提交方式
+
+
+
+ {{platformCp[platIndex].name}}
+
+
+
+
+
+
+ 收货地址
+
+
+ {{address.all_address}}
+
+
+
+
+
+ 添加收货地址
+
+
+
+
+ 快递运费
+ ¥{{freight}}
+
+
+
+
+
+
+ {{detail.group_type == 'drill' ? '钻石' : '白金'}}余额{{detail.recharge == 'add' ?
+ '充值' : '支付'}}
+ ¥{{detail.score}}
+
+
+ 实付金额
+ ¥{{amount}}
+
+
+
+
+
+
+ 支付方式
+ 微信支付
+
+
+
+
+
+
+
+
+
+
+
+ 购买前请仔细阅读使用须知、内容介绍
+
+
+
+
+ 购买须知
+
+
+
+
+ 内容介绍
+
+
+
+
+
+
+
+
+
+
+
+ 请选择收货地址
+ 新增收货地址
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/rights/rights.wxss b/pages/rights/rights.wxss
new file mode 100644
index 0000000..0625c65
--- /dev/null
+++ b/pages/rights/rights.wxss
@@ -0,0 +1,606 @@
+page {
+ background-color: #f7f7f7;
+}
+
+.cont {
+ width: 100%;
+ overflow: hidden;
+}
+
+
+/* 卡券权益 */
+.contBack {
+ position: relative;
+ width: 200%;
+ height: 400rpx;
+ left: -50%;
+ text-align: center;
+ background: #000000;
+ border-radius: 0 0 100% 100%;
+ overflow: hidden;
+}
+
+/* .contBack::after {
+ width: 100%;
+ height: 30rpx;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ z-index: 2;
+ content: '';
+ background-image: linear-gradient(transparent, rgba(0,0,0,.25));
+} */
+
+.classBack {
+ position: absolute;
+ left: 30%;
+ right: 30%;
+ width: 40%;
+ top: 40rpx;
+}
+
+.classCircle {
+ position: relative;
+}
+
+.classCircle::after,
+.contBack::before {
+ position: absolute;
+ border-radius: 50%;
+ content: '';
+ z-index: 1;
+ background-color: rgba(255,255,255,.1);
+}
+
+.classCircle::after {
+ left: 20%;
+ top: -20rpx;
+ width: 260rpx;
+ height: 260rpx;
+}
+
+.contBack::before {
+ right: 20%;
+ top: 55%;
+ width: 300rpx;
+ height: 300rpx;
+}
+
+.rightsCont {
+ position: absolute;
+ z-index: 3;
+ left: calc(30% - 2rpx);
+ right: calc(30% - 2rpx);
+ width: calc(40% + 4rpx);
+ top: 58rpx;
+}
+
+.rightsCont-btn {
+ background-color: #f4dfcc;
+ width: 100%;
+ line-height: 70rpx;
+ font-size: 38rpx;
+ color: #694425;
+ padding: 0 20rpx;
+ box-sizing: border-box;
+}
+
+.rightsCont-tips {
+ color: #fff;
+}
+
+.rightsNumber {
+ display: flex;
+ width: 100%;
+ margin: 30px 0 20px;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+}
+
+.rightsNumber text {
+ display: inline-block;
+ flex: 1;
+}
+
+.rightsAdd {
+ display: flex;
+}
+
+.rightsAdd-btn {
+ background: #eaeaea;
+ color: #535353;
+ border-radius: 50%;
+ text-align: center;
+ width: 50rpx;
+ height: 50rpx;
+ line-height: 45rpx;
+ font-size: 40rpx;
+ font-weight: 600;
+}
+
+.rightsAdd-input {
+ width: 100rpx;
+ text-align: center;
+ font-size: 28rpx;
+ line-height: 50rpx;
+}
+
+.rightsTips {
+ padding: 0 30rpx;
+ color: #ff5b5d;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.rightsList,
+.notice,
+.detailsStore {
+ background: white;
+ margin: 30rpx;
+ border-radius: 10rpx;
+ padding: 10rpx 0;
+ box-sizing: border-box;
+ box-shadow: 0 0 30rpx rgba(0,0,0,.15);
+}
+
+.rightsLabel,
+.rightsLabel-pay {
+ display: flex;
+ padding: 20rpx;
+ color: #6f7880;
+ font-size: 30rpx;
+}
+
+.rightsLabel .rightsLabel-left {
+ flex: 1;
+ color: #747d86;
+}
+
+.rightsLabel-black {
+ padding-top: 30rpx;
+}
+
+.rightsLabel-range {
+ display: flex;
+ color: #000;
+ font-weight: 600;
+}
+
+.rightsLabel-row {
+ width: 38rpx;
+ height: 38rpx;
+ margin: 2rpx 0 0 6rpx;
+}
+
+.rightsLabel-black .rightsLabel-right,
+.rightsLabel-red {
+ color: #ff5b5d;
+ font-weight: 600;
+ font-size: 32rpx;
+}
+
+.rightsLabel-black .rightsLabel-left {
+ color: #000;
+}
+
+.rightsLabel-score {
+ font-weight: 600;
+ color: #000;
+ font-size: 38rpx;
+}
+
+.rightsLabel-pay {
+ color: #000;
+}
+
+.rightsLabel-pay .rightsLabel-left {
+ flex: 1;
+}
+
+.notice {
+ padding: 20rpx;
+}
+
+.noticeTitle {
+ display: flex;
+}
+
+.noticeTitle-flex {
+ flex: 1;
+ display: flex;
+ font-size: 30rpx;
+ line-height: 46rpx;
+}
+
+.noticeTitle-img {
+ width: 46rpx;
+ height: 46rpx;
+ margin-right: 20rpx;
+}
+
+.noticeText {
+ font-size: 26rpx;
+ height: 0;
+ overflow: hidden;
+}
+
+.noticeText.active {
+ height: auto;
+}
+
+.noticeText-top {
+ margin: 30rpx 0 10rpx;
+ font-weight: 600;
+}
+
+.noticeText-cont {
+ line-height: 60rpx;
+}
+
+.noticeTitle-row {
+ width: 46rpx;
+ height: 46rpx;
+}
+
+.noticeTitle-row.active {
+ transform: rotate(90deg);
+}
+
+/* 门店 */
+.detailsStore {
+ padding: 20rpx;
+}
+
+.detailsStore-top {
+ display: flex;
+ line-height: 30rpx;
+ margin-bottom: 20rpx;
+}
+
+.detailsStore-see {
+ color: #dfae2e;
+ border: 2rpx solid #dfae2e;
+ border-radius: 10rpx;
+ font-size: 28rpx;
+ margin-top: 30rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+}
+
+.detailsStore-see text {
+ display: inline-block;
+}
+
+.detailsStore-see image {
+ width: 50rpx;
+ height: 50rpx;
+ margin-left: 10rpx;
+}
+
+/* 购买按钮 */
+.rightsBtn {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100rpx;
+ z-index: 9;
+ background: #fff;
+}
+
+.rightsBtn button,
+.rightsBtn text {
+ display: block;
+ margin: 12rpx 30rpx;
+ width: calc(100% - 60rpx) !important;
+ height: 74rpx !important;
+ line-height: 74rpx !important;
+ padding: 0;
+ background: #eacf88;
+ text-align: center;
+ border-radius: 60rpx;
+ font-size: 30rpx;
+}
+
+
+.rightsBtn.active text {
+ background: #dedede;
+ color: #888;
+}
+
+/* 选择收货地址 */
+.addressBack {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, .4);
+ z-index: 10;
+ width: 100%;
+ height: 100%;
+ display: none;
+}
+
+.addressBack.active {
+ display: block;
+}
+
+.addressCont {
+ position: fixed;
+ left: 0;
+ bottom: -1000%;
+ transition: .2s;
+ background: #fff;
+ z-index: 11;
+ width: 100%;
+}
+
+.addressCont.active {
+ bottom: 0;
+}
+
+.addressCont-title {
+ height: 90rpx;
+ line-height: 90rpx;
+ display: flex;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.addressCont-left {
+ flex: 1;
+}
+
+.addressCont-right {
+ color: #309ded;
+}
+
+.header-classify {
+ white-space: nowrap;
+ box-sizing: border-box;
+ height: 600rpx;
+}
+
+.addressCont-list {
+ padding: 30rpx 20rpx;
+ box-sizing: border-box;
+ font-size: 30rpx;
+ overflow: hidden;
+ position: relative;
+}
+
+.addressCont-top {
+ display: flex;
+ margin-bottom: 10rpx;
+}
+
+.addressCont-name {
+ font-weight: 600;
+}
+
+.addressCont-text {
+ color: #666;
+ width: calc(100% - 160rpx);
+}
+
+.addressCont-list:last-child {
+ border: none;
+}
+
+.rightsLabel-address {
+ display: flex;
+}
+
+.rightsLabel-address text {
+ display: inline-block;
+ width: calc(100% - 46rpx);
+}
+
+.rightsLabel-address .rightsLabel-right {
+ display: flex;
+ font-size: 28rpx;
+}
+
+.address-tool {
+ display: flex;
+ float: right;
+}
+
+.address-tool-btn {
+ font-size: 24rpx;
+ margin-top: 20rpx;
+ border: 2rpx solid #666;
+ color: #666;
+ border-radius: 6rpx;
+ text-align: center;
+ height: 50rpx;
+ line-height: 50rpx;
+ padding: 0 20rpx;
+ margin-right: 20rpx;
+ display: flex;
+}
+
+.address-tool-btn-del {
+ color: #dfae2e;
+ border-color: #dfae2e;
+}
+
+.address-tool-icon {
+ width: 120rpx;
+ height: 54rpx;
+ line-height: 54rpx;
+ border-radius: 4rpx;
+ text-align: center;
+ color: #fff;
+ position: absolute;
+ top: 45rpx;
+ right: 10rpx;
+ background: #dfae2e;
+ transform: scale(.9, .9);
+ font-size: 24rpx;
+}
+
+.rightsPoint {
+ position: fixed;
+ left: 0;
+ bottom: 100rpx;
+ background: #fff;
+ z-index: 9;
+ width: 100%;
+ padding: 20rpx 20rpx 10rpx;
+ box-sizing: border-box;
+}
+
+.rightsPoint-cont {
+ width: 100%;
+ background: #fff8e5;
+ border: 2rpx solid #f2ecde;
+ border-radius: 10rpx;
+ position: relative;
+ max-height: 50vh;
+ overflow-y: scroll;
+}
+
+.rightsPoint-top {
+ font-size: 28rpx;
+ display: flex;
+ padding: 20rpx;
+ box-sizing: border-box;
+ font-weight: 600;
+}
+
+.rightsPoint-top image {
+ width: 36rpx;
+ height: 36rpx;
+ margin-right: 10rpx;
+}
+
+.rightsPoint-text {
+ padding: 0 20rpx;
+ box-sizing: border-box;
+ font-size: 24rpx;
+ line-height: 44rpx;
+ height: 90rpx;
+ transition: height 25s;
+ overflow: hidden;
+}
+
+.rightsPoint-text.active {
+ height: auto;
+ transition: 2s;
+}
+
+.rightsPoint-text view {
+ position: relative;
+ padding-left: 40rpx;
+}
+
+.rightsPoint-text view::after {
+ position: absolute;
+ content: '';
+ left: 10rpx;
+ top: 20rpx;
+ background: #000;
+ width: 10rpx;
+ height: 10rpx;
+ border-radius: 50%;
+}
+
+.rightsPoint-bolck {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: calc(100% - 40rpx);
+}
+
+.pointMore {
+ text-align: center;
+ width: 100%;
+ background: #fff8e5;
+ height: 80rpx;
+ line-height: 82rpx;
+ position: relative;
+ margin-top: 10rpx;
+}
+
+.pointMore::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #f2ecde;
+}
+
+.pointMore text {
+ font-size: 28rpx;
+ color: #c38e00;
+ animation: dong 1.8s infinite;
+ display: inline-block;
+}
+
+.pointMore image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-left: 4rpx;
+ vertical-align: -4rpx;
+ animation: dong 1.8s infinite;
+}
+
+@keyframes dong {
+ 0% {
+ transform: translate(0px, 0px);
+ }
+
+ 50% {
+ transform: translate(0px, -6rpx);
+ }
+
+ 100% {
+ transform: translate(0px, 0px);
+ }
+}
+
+.webBack {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 9999;
+ background-color: #fff;
+ text-align: center;
+ display: none;
+}
+
+.webBack.active {
+ display: block;
+}
+
+.welfareCont-top{
+ white-space: nowrap;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-around;
+ width: 100%;
+ padding: 0 10rpx;
+ box-sizing: border-box;
+ margin: 50rpx 0 20rpx;
+}
+
+.welfareCont-list-img {
+ border-radius: 50%;
+ width: 120rpx;
+ height: 120rpx;
+ display: inline-block;
+ margin: 0 15rpx;
+ overflow: hidden;
+}
+
+.welfareCont-list-img image {
+ width: 100%;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/pages/store/store.js b/pages/store/store.js
new file mode 100644
index 0000000..224c8d2
--- /dev/null
+++ b/pages/store/store.js
@@ -0,0 +1,213 @@
+// pages/store/store.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ stores : [], //门店列表
+ id : 0, //优惠券id
+ searchText : '', //搜索关键字
+ longitude : 0, //经度
+ latitude : 0, //纬度
+ //省份选择
+ areas : [],
+ areaIndex : 0,
+ //市级选择
+ cityList : [],
+ cityIndex : 0,
+ //区域选择
+ regiList : [],
+ regiIndex : 0,
+
+ page : {}, //下一页
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ // 优惠券id
+ this.setData({
+ id :options.id
+ })
+
+ // 获取位置
+ wx.getLocation({
+ type: 'gcj02',
+ success: res=> {
+ this.setData({
+ longitude : res.longitude,
+ latitude : res.latitude
+ })
+ // 解析坐标
+ getApp().qqmapsdk.reverseGeocoder({
+ location: {
+ latitude : res.latitude,
+ longitude : res.longitude
+ },
+ success: res=>{
+ if(res.message == "query ok"){
+ let addressInfo = res.result.address_component
+ // 获取门店列表
+ this.storesInfo(addressInfo);
+ }else{
+ wx.showToast({
+ title: res.message,
+ icon : 'none'
+ })
+ }
+ }
+ })
+ }
+ })
+ },
+
+ /**
+ * 选择城市信息
+ */
+ regi(e){
+ let chantType = e.currentTarget.dataset.type,
+ chantIndex = e.detail.value,
+ name = ""
+
+ if(chantType == "area"){
+ name = "areaIndex"
+ }else if(chantType == "city"){
+ name = "cityIndex"
+ this.getAreas(this.data.cityList[chantIndex].code, "")
+ }else if(chantType == "regi"){
+ name = "regiIndex"
+ }
+
+ this.setData({
+ [name] : chantIndex
+ })
+
+ // 获取门店列表
+ this.storesInfo()
+ },
+
+ /**
+ * 门店列表
+ */
+ storesInfo(addressInfo, page) {
+ let coupon_id = this.data.id,
+ user_lng = this.data.longitude,
+ user_lat = this.data.latitude,
+ province_id = "",
+ city_id = "",
+ district_id = "",
+ title = this.data.searchText || "",
+ areaIndex = this.data.areaIndex,
+ cityIndex = this.data.cityIndex,
+ regiIndex = this.data.regiIndex,
+ cityList = this.data.cityList,
+ areas = this.data.areas,
+ regiList = this.data.regiList
+
+ if(!addressInfo){
+ province_id = areas[areaIndex].code
+ city_id = cityList[cityIndex].code
+ district_id = regiList[regiIndex].code
+ }
+
+ wx.$api.user.stores(coupon_id, province_id, city_id, district_id, title, user_lng, user_lat, page).then(res=>{
+ let stores = this.data.stores,
+ newData = []
+ if(page == 1 || page == undefined) stores = []
+ newData = stores.concat(res.data.stores.data)
+
+ stores.map(res=>{
+ let distance = res.distance
+ if(res.distance > 1000){
+ distance = (distance / 1000) + "km"
+ }else{
+ distance = distance + "m"
+ }
+ res.km = distance
+ })
+
+ if(addressInfo){
+ cityList = res.data.citys
+ areas = res.data.provinces
+
+ areaIndex = areas.findIndex(val => val.name == addressInfo.province)
+ cityIndex = cityList.findIndex(val => val.name == addressInfo.city)
+ // this.getAreas(cityList[cityIndex].code, addressInfo.district)
+ this.getAreas(cityList[cityIndex].code, '')
+
+ }
+ this.setData({
+ areas : areas,
+ stores : newData,
+ cityList : cityList,
+ areaIndex : areaIndex,
+ cityIndex : cityIndex,
+ page : res.data.stores.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 获取区级信息
+ */
+ getAreas(sn, areas){
+ wx.$api.user.areas(sn).then(res=>{
+ let regiList = res.data,
+ regiIndex = 0
+
+ if(areas) regiIndex = regiList.findIndex(val => val.name == areas)
+
+ this.setData({
+ regiList : regiList,
+ regiIndex : regiIndex
+ })
+ })
+ },
+
+ /**
+ * 查看门店详情页
+ */
+ detailsTap(e) {
+ let store_id = e.currentTarget.dataset.id,
+ user_lng = this.data.longitude,
+ user_lat = this.data.latitude
+
+ wx.navigateTo({
+ url: '/pages/storeDetails/storeDetails?store_id=' + store_id + '&user_lng=' + user_lng + '&user_lat=' + user_lat,
+ })
+ },
+
+ /**
+ * 搜索门店
+ */
+ searchForm(e) {
+ this.setData({
+ searchText : e.detail.value.search
+ })
+
+ // 获取门店列表
+ this.storesInfo()
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.setData({
+ page: pageNumber
+ })
+ this.storesInfo('', pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/store/store.json b/pages/store/store.json
new file mode 100644
index 0000000..e0dff17
--- /dev/null
+++ b/pages/store/store.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "门店列表"
+}
\ No newline at end of file
diff --git a/pages/store/store.wxml b/pages/store/store.wxml
new file mode 100644
index 0000000..1abd8e7
--- /dev/null
+++ b/pages/store/store.wxml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+ {{areas[areaIndex].name}}
+
+
+
+
+
+
+
+ {{cityList[cityIndex].name}}
+
+
+
+
+
+
+
+ {{regiList[regiIndex].name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+ {{item.address}}
+ {{item.km}}
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+
+ 暂无商家
+
\ No newline at end of file
diff --git a/pages/store/store.wxss b/pages/store/store.wxss
new file mode 100644
index 0000000..93b8b97
--- /dev/null
+++ b/pages/store/store.wxss
@@ -0,0 +1,136 @@
+/* 搜索 */
+.search {
+ background: #fff;
+ position: fixed;
+ width: 100%;
+ left: 0;
+ top: 0;
+ height: 110rpx;
+ z-index: 99;
+}
+
+.searchCont {
+ background: #f7f7f7;
+ border-radius: 50rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 28rpx;
+ margin: 20rpx 20rpx 0;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.searchCont image {
+ width: 34rpx;
+ height: 34rpx;
+ margin: 24rpx 20rpx 0 0;
+}
+
+.searchCont input {
+ height: 100%;
+ width: calc(100% - 150rpx);
+}
+
+.searchCont button {
+ background: transparent;
+ width: 100rpx !important;
+ text-align: right;
+ padding: 0 !important;
+ margin: 0 !important;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 30rpx;
+ color: #ff9b1a;
+}
+
+/* 筛选 */
+.screen {
+ background: #fff;
+ position: fixed;
+ width: 100%;
+ left: 0;
+ top: 110rpx;
+ height: 90rpx;
+ overflow: hidden;
+ z-index: 99;
+}
+
+.screenLabel {
+ float: left;
+ width: calc(33.33% - 20rpx);
+ text-align: center;
+ color: #5f5f5f;
+ line-height: 90rpx;
+ font-size: 28rpx;
+ margin: 0 10rpx;
+}
+
+.screenLabel picker {
+ width: calc(100% - 17rpx);
+ position: relative;
+}
+
+.screenLabel-arrow {
+ position: absolute;
+ right: 0;
+ top: calc(50% - 17rpx);
+ width: 34rpx;
+ height: 34rpx;
+}
+
+/* 门店列表 */
+
+.storeList {
+ background: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ margin-top: 220rpx;
+ padding-bottom: 40rpx;
+}
+
+.detailsStore-list {
+ position: relative;
+ margin-bottom: 40rpx;
+}
+
+.detailsStore-list:last-child {
+ margin-bottom: 0;
+}
+
+.detailsStore-logo {
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 10rpx;
+}
+
+.detailsStore-cont {
+ position: absolute;
+ left: 150rpx;
+ top: 10rpx;
+ width: calc(100% - 150rpx);
+}
+
+.detailsStore-tel {
+ width: 60rpx;
+ height: 60rpx;
+ margin-top: 25rpx;
+}
+
+.detailsStore-place {
+ font-size: 24rpx;
+ line-height: 40rpx;
+ color: #5a5a5a;
+ display: flex;
+}
+
+.detailsStore-place text {
+ flex: 1;
+ display: inline-block;
+ font-size: 28rpx;
+ margin-right: 20rpx;
+}
+
+.detailsStore-name {
+ margin-bottom: 20rpx;
+}
\ No newline at end of file
diff --git a/pages/storeDetails/storeDetails.js b/pages/storeDetails/storeDetails.js
new file mode 100644
index 0000000..62f651f
--- /dev/null
+++ b/pages/storeDetails/storeDetails.js
@@ -0,0 +1,62 @@
+// pages/storeDetails/storeDetails.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ storeinfo : '', //门店详情
+ distance : 0,
+ longitude : 0,
+ latitude : 0
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+
+ wx.$api.user.storesShow(options.store_id, options.user_lng, options.user_lat).then(res=>{
+ let distance = res.data.distance
+
+ if(distance > 1000){
+ distance = (distance / 1000) + "km"
+ }else{
+ distance = distance + "m"
+ }
+
+ this.setData({
+ storeinfo : res.data,
+ distance : distance
+ })
+ })
+ },
+
+ /**
+ * 拨打电话
+ */
+ tel(e) {
+ let tel = this.data.storeinfo.mobile
+ wx.showActionSheet({
+ itemList : ['呼叫商家'],
+ success : res =>{
+ if(res.tapIndex==0){
+ wx.makePhoneCall({
+ phoneNumber: tel
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 导航
+ */
+ siteMap(){
+ wx.openLocation({
+ latitude : parseFloat(this.data.storeinfo.latitude),
+ longitude : parseFloat(this.data.storeinfo.longitude),
+ address : this.data.storeinfo.address
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/storeDetails/storeDetails.json b/pages/storeDetails/storeDetails.json
new file mode 100644
index 0000000..5bd1958
--- /dev/null
+++ b/pages/storeDetails/storeDetails.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "门店详情"
+}
\ No newline at end of file
diff --git a/pages/storeDetails/storeDetails.wxml b/pages/storeDetails/storeDetails.wxml
new file mode 100644
index 0000000..aa896e8
--- /dev/null
+++ b/pages/storeDetails/storeDetails.wxml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ {{storeinfo.title}}
+
+
+
+
+
+ {{storeinfo.address}}
+ 距您 {{distance}}
+
+
+
+
+
+
+
+
+ 营业时间
+ {{storeinfo.open_time}}
+ 00:00
+
+
+
+
+
+
+
+
+
+ 去导航
+
+
\ No newline at end of file
diff --git a/pages/storeDetails/storeDetails.wxss b/pages/storeDetails/storeDetails.wxss
new file mode 100644
index 0000000..53be56d
--- /dev/null
+++ b/pages/storeDetails/storeDetails.wxss
@@ -0,0 +1,102 @@
+/* 门店详情 */
+.detailsImg {
+ position: relative;
+ width: 100%;
+ padding-top: 60%;
+}
+
+.detailsImg image {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.detailsCont {
+ background: #fff;
+}
+
+.detailsName {
+ font-size: 34rpx;
+ padding: 30rpx;
+ font-weight: 600;
+ box-sizing: border-box;
+}
+
+.detailsLabel {
+ display: flex;
+ padding: 30rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.detailsLabel::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ background: #e7e7e7;
+ width: 100%;
+ height: 2rpx;
+}
+
+.detailsLabel-left {
+ width: calc(100%- 40rpx);
+ display: flex;
+ flex: 1;
+ color: #5e5e5e;
+}
+
+.detailsLabel-left image {
+ width: 40rpx;
+ height: 40rpx;
+ margin: 20rpx 20rpx 0 0;
+}
+
+.detailsLabel-tel {
+ width: 60rpx;
+ height: 60rpx;
+ margin-top: 14rpx;
+}
+
+.detailsLabel-name {
+ font-size: 26rpx;
+ width: calc(100% - 110rpx);
+ margin-right: 10rpx;
+}
+
+.detailsLabel-name text {
+ font-weight: 600;
+ font-size: 30rpx;
+ display: block;
+ margin-bottom: 10rpx;
+}
+
+.detailsLabel-add {
+ width: 34rpx;
+ height: 34rpx;
+ margin-top: 24rpx;
+}
+
+.detailsBtn {
+ background: #fff;
+ width: 100%;
+ height: 120rpx;
+ text-align: center;
+ left: 0;
+ bottom: 0;
+ position: fixed;
+ padding: 20rpx;
+ box-sizing: border-box;
+}
+
+.detailsBtn-cont {
+ width: 100%;
+ background: #ef8e41;
+ color: #fff;
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+ border-radius: 50rpx;
+}
\ No newline at end of file
diff --git a/pages/switchcity/switchcity.js b/pages/switchcity/switchcity.js
new file mode 100644
index 0000000..de4c22d
--- /dev/null
+++ b/pages/switchcity/switchcity.js
@@ -0,0 +1,180 @@
+// 获取城市
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ winHeight : 0, //可视高度
+ cityList : [], //城市列表
+ adcode : 0, //城市code
+ scrollTop : 0, //置顶高度
+ scrollTopId : '', //置顶id
+ searchLetter: [], //热门城市
+ regionShow : false, //区域显示开关
+ city : '', //城市名称
+ area : '', //区域名称
+ cityName : '', //定位城市名称
+ defaultcity : '', //定位区域名称
+ defaultregi : '', //区域名称
+ regiList : [], //区域列表
+ address : {
+ city_code: "",
+ area_code: ""
+ }
+ },
+
+ onLoad(e) {
+ wx.getLocation({
+ success: res => {
+ // 解析坐标
+ getApp().qqmapsdk.reverseGeocoder({
+ location: {
+ latitude : res.latitude,
+ longitude : res.longitude
+ },
+ success: res=>{
+ this.setData({
+ defaultcity : res.result.ad_info.city,
+ defaultregi : res.result.ad_info.district
+ })
+ }
+ })
+ },
+ fail: res => {}
+ })
+
+ if(e.area === '') e.area_code = '0'
+
+ this.setData({
+ address : {
+ area_code: e.area_code,
+ city_code: e.city_code,
+ area: e.area,
+ city: e.city
+ }
+ })
+
+ // 获取全部城市
+ this.local();
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onShow() {},
+
+ /**
+ * 全部城市
+ */
+ local() {
+ wx.$api.index.newCity().then(res=>{
+ this.setData({
+ cityList : res.data
+ })
+ // 获取区级列表
+ this.regilist(this.data.address.city_code)
+ }).catch(err=>{
+ if(!err.login){
+ // 写入缓存
+ wx.setStorage({
+ key : 'token',
+ data : ''
+ })
+ }
+ })
+ },
+
+ /**
+ * 城市字母
+ */
+ clickLetter (e) {
+ var showLetter = e.currentTarget.dataset.letter;
+ this.setData({
+ showLetter : showLetter,
+ isShowLetter: true,
+ scrollTopId : showLetter,
+ })
+ var that = this;
+ setTimeout(function () {
+ that.setData({
+ isShowLetter: false
+ })
+ }, 1000)
+ },
+
+ /**
+ * 选择城市
+ */
+ bindCity(e) {
+ let stairid = e.currentTarget.dataset.citycode,
+ city = e.currentTarget.dataset.city
+
+ this.setData({
+ address: {
+ city_code: stairid,
+ city: city
+ }
+ })
+
+ // 获取区级列表
+ this.regilist(stairid)
+ },
+
+ /**
+ * 地区列表
+ */
+ regilist(areaCode) {
+ wx.$api.index.newidxCity(areaCode).then(res=>{
+ res.data.unshift({ code: '0', name:'全部'})
+ this.setData({
+ regiList : res.data
+ })
+ })
+ },
+
+ /**
+ * 选择市区返回
+ */
+ regionOpt (e) {
+ let area_name = e.currentTarget.dataset.city
+ var pages = getCurrentPages();
+ var prevPage = pages[pages.length - 2];
+
+ if(area_name === '全部') area_name = this.data.address.city
+
+ prevPage.setData({
+ city: area_name
+ })
+ wx.navigateBack({
+ delta: 1
+ })
+ },
+
+ /**
+ * 选择定位城市返回
+ */
+ nowLocation () {
+ var pages = getCurrentPages();
+ var prevPage = pages[pages.length - 2];
+
+ prevPage.setData({
+ cityName: this.data.defaultcity,
+ city : this.data.defaultregi
+ })
+ wx.navigateBack({
+ delta: 1
+ })
+ },
+
+ /**
+ * 点击当前回到顶部
+ */
+ hotCity () {
+ this.setData({
+ scrollTop: 0,
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/switchcity/switchcity.json b/pages/switchcity/switchcity.json
new file mode 100644
index 0000000..1ac166c
--- /dev/null
+++ b/pages/switchcity/switchcity.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "切换城市"
+}
\ No newline at end of file
diff --git a/pages/switchcity/switchcity.wxml b/pages/switchcity/switchcity.wxml
new file mode 100644
index 0000000..5ee18b1
--- /dev/null
+++ b/pages/switchcity/switchcity.wxml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+ {{showLetter}}
+
+
+
+
+ 当前定位:{{defaultcity}}{{defaultregi}}
+
+ 当前定位:
+
+
+
+
+
+
+
+ 黑龙江省
+ {{address.city}}
+ {{address.area ? address.area : '请选择区域'}}
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
\ No newline at end of file
diff --git a/pages/switchcity/switchcity.wxss b/pages/switchcity/switchcity.wxss
new file mode 100644
index 0000000..db5b69e
--- /dev/null
+++ b/pages/switchcity/switchcity.wxss
@@ -0,0 +1,399 @@
+page {
+ background: #fff;
+}
+
+.hotcity-top {
+ border-bottom: 20rpx #f5f5f5 solid;
+}
+
+.searchLetter {
+ position: fixed;
+ right: 0;
+ width: 50rpx;
+ text-align: center;
+ justify-content: center;
+ display: flex;
+ flex-direction: column;
+ color: #666;
+ z-index: 1;
+}
+
+.searchLetter view {
+ margin-top: 20rpx;
+}
+
+.touchClass {
+ background-color: #fff;
+ color: #fff;
+ padding-top: 46rpx;
+}
+
+.showSlectedLetter {
+ background-color: rgba(0, 0, 0, 0.5);
+ color: #fff;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ margin: -100rpx;
+ width: 200rpx;
+ height: 200rpx;
+ border-radius: 20rpx;
+ font-size: 52rpx;
+ z-index: 1;
+}
+
+.selection {
+ display: flex;
+ width: 100%;
+ flex-direction: column;
+}
+
+.selection.active .item_city {
+ color: #e83339;
+}
+
+.item_letter {
+ display: flex;
+ background-color: #f5f5f5;
+ height: 60rpx;
+ padding-left: 34rpx;
+ align-items: center;
+ font-size: 24rpx;
+ color: #666;
+}
+
+.item_city {
+ position: relative;
+ display: flex;
+ height: 100rpx;
+ padding-left: 34rpx;
+ align-items: center;
+ border-bottom: 1rpx solid #eaeaea;
+ font-size: 26rpx;
+ color: #666;
+}
+
+.checkImg {
+ width: 28rpx;
+ height: 28rpx;
+ position: absolute;
+ right: 20rpx;
+ top: 38rpx;
+ display: none;
+}
+
+.checkImg.active {
+ display: block;
+}
+
+.thisCityName {
+ display: inline-block;
+ border: 1rpx solid #1c74c6;
+ border-radius: 8rpx;
+ padding: 10rpx;
+ font-size: 24rpx;
+ color: #1c74c6;
+ text-align: center;
+ min-width: 149.5rpx;
+ margin: 20rpx 0 20rpx 30rpx;
+}
+
+.thishotText {
+ color: #1c74c6;
+ font-size: 20rpx;
+ margin: 0 !important;
+}
+
+.slectCity {
+ border-color: #1c74c6 !important;
+}
+
+.slectCity view {
+ color: #1c74c6 !important;
+}
+
+.weui-grid {
+ position: relative;
+ float: left;
+ padding: 10rpx 0;
+ width: 149.5rpx;
+ box-sizing: border-box;
+ border: 1rpx solid #ececec;
+ border-radius: 8rpx;
+ margin: 10rpx 12rpx;
+}
+
+.weui-grid__label {
+ display: block;
+ text-align: center;
+ color: #333;
+ font-size: 24rpx;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+
+/* 热门城市 */
+
+.searchLetter {
+ position: fixed;
+ right: 0;
+ width: 50rpx;
+ text-align: center;
+ justify-content: center;
+ display: flex;
+ flex-direction: column;
+ color: #666;
+ z-index: 1;
+}
+
+.searchLetter view {
+ margin-top: 20rpx;
+}
+
+.touchClass {
+ background-color: #fff;
+ color: #fff;
+ padding-top: 46rpx;
+}
+
+.showSlectedLetter {
+ background-color: rgba(0, 0, 0, 0.5);
+ color: #fff;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ margin: -100rpx;
+ width: 200rpx;
+ height: 200rpx;
+ border-radius: 20rpx;
+ font-size: 52rpx;
+ z-index: 1;
+}
+
+/* 公共标题 */
+.hotcity {
+ position: fixed;
+ width: 100%;
+ left: 0;
+ top: 0;
+ z-index: 1000;
+ background-color: #fff;
+ font-size: 28rpx;
+ height: 90rpx;
+}
+
+.hotcity-location {
+ color: #999;
+ padding: 10px;
+ box-sizing: border-box;
+ display: flex;
+ line-height: 54rpx;
+}
+
+.hotcity-location text {
+ color: #1c74c6;
+ display: inline-block;
+ padding: 0 10rpx;
+ font-size: 26rpx;
+ height: 54rpx;
+ line-height: 54rpx;
+ border-radius: 6rpx;
+ margin-left: 10rpx;
+ flex: 1;
+}
+
+.hotcity-location image {
+ width: 34rpx;
+ height: 34rpx;
+ margin: 10rpx 10rpx 0 0;
+}
+
+.hotcity-choice {
+ padding: 10px 10px 0 10px;
+ box-sizing: border-box;
+ color: #1c74c6;
+ border-top: 1rpx solid #ededed;
+}
+
+
+/* 区域选择 */
+.region {
+ position: fixed;
+ z-index: 1000;
+ left: 0;
+ top: 178rpx;
+ width: 100%;
+ height: calc(100% - 178rpx);
+ padding-left: 280rpx;
+ box-sizing: border-box;
+ background: #f5f5f5;
+}
+
+.region.active {
+ display: block;
+}
+
+.region .item_city {
+ padding-left: 10rpx;
+}
+
+.city-name {
+ background: #f5f5f5;
+ line-height: 60rpx;
+ padding: 0 20rpx;
+ box-sizing: border-box;
+ font-size: 28rpx;
+}
+
+.region .item_city {
+ padding: 0 0 0 20rpx;
+ box-sizing: border-box;
+ font-weight: normal;
+ font-size: 24rpx;
+ height: 102rpx;
+}
+
+/* 开启定位 */
+.location-btn[size="mini"] {
+ background-color: #ee8e44;
+ color: #fff;
+ font-size: 24rpx;
+ line-height: 54rpx;
+ margin: 0 0 0 20rpx;
+}
+
+/* 搜索框 */
+.weui-search-bar {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 50px;
+ padding: 0 10px;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ box-sizing: border-box;
+ background-color: #f5f5f5;
+ border-top: 1rpx solid #f1f1f1;
+ border-bottom: 1rpx solid #f1f1f1;
+}
+
+.weui-icon-search_in-box {
+ position: absolute;
+ left: 10px;
+ top: 6px;
+}
+
+.weui-search-bar__form {
+ -webkit-box-flex: 1;
+ height: 32px;
+ line-height: 32px;
+ margin-top: 7px;
+ -webkit-flex: auto;
+ flex: auto;
+ border-radius: 5px;
+ background: #FFFFFF;
+ border: 1rpx solid #f1f1f1;
+}
+
+.weui-search-bar__box {
+ position: relative;
+ padding-left: 30px;
+ padding-right: 30px;
+ height: 32px;
+ width: 100%;
+ box-sizing: border-box;
+ z-index: 1;
+}
+
+.weui-search-bar__input {
+ height: 32px;
+ line-height: 32px;
+ font-size: 14px;
+ padding-left: 10rpx;
+}
+
+.weui-search-bar__cancel-btn {
+ margin-left: 10px;
+ line-height: 50px;
+ color: #09BB07;
+ white-space: nowrap;
+ font-size: 30rpx;
+}
+
+
+.scrollLeft {
+ position: fixed;
+ top: 178rpx;
+ height: calc(100% - 178rpx);
+ left: 0;
+ width: 260rpx;
+ z-index: 1001;
+ border-right: 1rpx solid #f1f1f1;
+ background-color: #fff;
+}
+
+
+.newLetter {
+ position: fixed;
+ top: 90rpx;
+ left: 0;
+ width: 100%;
+ height: 90rpx;
+ line-height: 90rpx;
+ background-color: #fff;
+ z-index: 1001;
+ font-size: 28rpx;
+ padding: 0 20rpx;
+ box-sizing: border-box;
+}
+
+.newLetter::before {
+ position: absolute;
+ content: '';
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #f1f1f1;
+}
+
+.newLetter::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #f1f1f1;
+}
+
+.newLetter text {
+ display: inline-block;
+ position: relative;
+ margin-right: 20rpx;
+ padding: 0 10rpx;
+}
+
+.newLetter text.active {
+ color: #e83339;
+}
+
+.newLetter text.active::before {
+ position: absolute;
+ content: '';
+ left: 0;
+ bottom: -2rpx;
+ width: 100%;
+ height: 4rpx;
+ background: #e83339;
+}
\ No newline at end of file
diff --git a/pages/user/user.js b/pages/user/user.js
new file mode 100644
index 0000000..cd92fd6
--- /dev/null
+++ b/pages/user/user.js
@@ -0,0 +1,174 @@
+
+/*
+ * 本时生活
+ */
+
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ isUser : false, //用户登录状态
+ currentId : '', //轮播下标
+ infos : '', //用户信息
+ order : '', //订单信息
+ account : '',
+ // 卡轮播
+ swiper: {
+ imgUrls: [
+ {
+ id : 0,
+ src : '/static/img/user_card_00.png',
+ color : '#676869',
+ type : 'silver'
+ },
+ {
+ id : 2,
+ src : '/static/img/user_card_02.png',
+ color : '#192b4c',
+ type : 'drill'
+ }
+ ],
+ autoplay: false,
+ interval: 5000,
+ duration: 1000,
+ current : 0
+ }
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ },
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 检查用户是否已登录
+ const current = wx.getStorageSync("current")
+ this.setData({
+ currentId: current
+ })
+
+ if(wx.getStorageSync("token") == ""){
+ this.setData({
+ infos : '',
+ order : '',
+ account : '',
+ isUser : false
+ })
+ return
+ }
+
+ this.setData({
+ isUser : getApp().globalData.isUser
+ })
+
+ // 获取用户信息
+ this.userInfo();
+ },
+
+ /**
+ * 用户信息
+ */
+ userInfo() {
+ wx.$api.user.index().then(res=>{
+ this.setData({
+ infos : res.data.info,
+ order : res.data.order,
+ account : res.data.info.account
+ })
+ }).catch(err=>{
+ if(!err.login){
+ this.setData({
+ infos : '',
+ order : '',
+ account : '',
+ isUser : false
+ })
+ }
+ })
+ },
+
+ /**
+ * 处理未登录时的转跳
+ */
+ userNav(e){
+ let pageUrl = e.currentTarget.dataset.url
+ if(this.data.isUser){
+ wx.navigateTo({
+ url: pageUrl
+ })
+ }else{
+ // 去登录
+ wx.navigateTo({
+ url: "/pages/login/login"
+ })
+ }
+ },
+
+ /**
+ * 判断是否新用户
+ */
+ userLogin(){
+ if(app.globalData.token != '') {
+ wx.navigateTo({
+ url: '/pages/chooseTel/chooseTel'
+ })
+ }else {
+ wx.navigateTo({
+ url: '/pages/login/login',
+ })
+ }
+ },
+
+ /**
+ * 切换用户
+ */
+ switchParty() {
+ wx.navigateTo({
+ url: '/pages/chooseTel/chooseTel?type=mobiles'
+ })
+ },
+
+ /**
+ * 左箭头
+ */
+ prevImg () {
+ var swiper = this.data.swiper;
+ var current = swiper.current;
+
+ swiper.current = current > 0 ? current - 1 : swiper.imgUrls.length - 1;
+ this.setData({
+ swiper: swiper,
+ })
+ },
+
+ /**
+ * 右箭头
+ */
+ nextImg () {
+ var swiper = this.data.swiper;
+ var current = swiper.current;
+ swiper.current = current < (swiper.imgUrls.length - 1) ? current + 1 : 0;
+ this.setData({
+ swiper: swiper,
+ })
+ },
+
+ /**
+ * 敬请期待
+ */
+ await() {
+ wx.showToast({
+ title : '努力开发中~',
+ icon : 'none',
+ duration: 1000
+ })
+ }
+
+})
\ No newline at end of file
diff --git a/pages/user/user.json b/pages/user/user.json
new file mode 100644
index 0000000..7d66fe4
--- /dev/null
+++ b/pages/user/user.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents" : {},
+ "navigationBarTitleText": "个人中心"
+}
\ No newline at end of file
diff --git a/pages/user/user.wxml b/pages/user/user.wxml
new file mode 100644
index 0000000..050ca0d
--- /dev/null
+++ b/pages/user/user.wxml
@@ -0,0 +1,171 @@
+
+
+
+
+
+ {{infos.identity.identity_id == 0 ? '普通用户':'惠生活会员'}}
+
+
+
+ {{infos.nickname}}
+
+
+ {{infos.username}}
+
+
+
+
+ 切换账号
+
+
+
+
+
+
+
+
+ 去登录
+
+
+
+
+
+
+
+ 我的会员卡
+
+
+
+
+
+ 可用余额:
+ {{account.silver}}
+ {{account.gold}}
+ {{account.drill}}
+
+
+
+
+
+
+
+
+
+
+ 滑动切换,查看更多权益
+
+
+
+
+
+
+ 我的服务
+
+
+
+
+
+ 我的卡券
+
+
+
+
+
+ 红包领取
+
+
+
+
+
+
+ 收货地址
+
+
+
+
+
+ 实体卡激活
+
+
+
+
+
+
+ 兑换订单
+
+
+
+
+
+
+
+ 所有订单
+
+
+
+
+
+ 待支付
+
+
+
+
+
+ 待发货
+
+
+
+
+
+ 已发货
+
+
+
+
diff --git a/pages/user/user.wxss b/pages/user/user.wxss
new file mode 100644
index 0000000..ad9d9ce
--- /dev/null
+++ b/pages/user/user.wxss
@@ -0,0 +1,228 @@
+/* 个人中心 */
+.userHead {
+ display: flex;
+ padding: 30rpx;
+ box-sizing: border-box;
+ background: white;
+}
+
+.userHead-img {
+ width: 135rpx;
+ height: 135rpx;
+ border-radius: 50%;
+ position: relative;
+}
+
+.userHead-img image {
+ position: absolute;
+ left: 22rpx;
+ top: 0;
+ width: 110rpx;
+ height: 110rpx;
+ border-radius: 50%;
+}
+
+.no-userHead {
+ width: 120rpx;
+ height: 120rpx;
+}
+
+.userHead-img view {
+ display: inline-block;
+ position: absolute;
+ bottom: 0;
+ left: 10rpx;
+ background: #c6c6c6;
+ border-radius: 30rpx;
+ color: #fff;
+ font-size: 24rpx;
+ padding: 4rpx 0;
+ text-align: center;
+ width: 130rpx;
+ display: inline-block;
+ z-index: 99;
+}
+
+.userHead-img view.active {
+ width: 144rpx;
+ left: 8rpx;
+ background: #000;
+ color: #fff;
+}
+
+.userHead-text {
+ margin-left: 30rpx;
+ width: calc(100% - 340rpx);
+}
+
+.userHead-switch {
+ border: 2rpx solid #000;
+ border-radius: 50rpx;
+ font-size: 24rpx;
+ height: 58rpx;
+ line-height: 58rpx;
+ width: 160rpx;
+ margin-top: 30rpx;
+ display: flex;
+}
+
+.userHead-switch image {
+ width: 30rpx;
+ height: 30rpx;
+ margin: 15rpx 6rpx 0 12rpx;
+}
+
+.userHead-name {
+ margin: 10rpx 0 20rpx;
+ font-size: 32rpx;
+ font-weight: 600;
+}
+
+
+.userHead-login {
+ border: 2rpx solid #313131;
+ border-radius: 6rpx;
+ font-size: 28rpx;
+ padding: 8rpx 30rpx;
+ margin-top: 30rpx;
+ display: inline-block;
+}
+
+.userHead-tel {
+ font-size: 28rpx;
+}
+
+/* 轮播图 */
+.userCard {
+ background: white;
+ padding-bottom: 30rpx;
+ margin-bottom: 20rpx;
+}
+
+.userCard-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ padding: 30rpx 30rpx 0;
+ margin: 20rpx 0;
+}
+
+.userCard-cont {
+ padding: 30rpx 80rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.userCard-clip {
+ position: relative;
+ padding-top: 55%;
+ width: 100%;
+}
+
+/* .userCard-clip::after {
+ content: '';
+ left: 10%;
+ top: 0;
+ background: rgba(0, 0, 0, .5);
+ position: absolute;
+ z-index: 1;
+ width: 80%;
+ height: 90%;
+ border-radius: 20px;
+} */
+
+.userCard-swiper {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 9;
+}
+
+.userCard-item {
+ padding: 0 10rpx;
+ box-sizing: border-box;
+}
+
+.userCard-img {
+ width: 100%;
+ height: 100%;
+ background-size: 100% 100%;
+}
+
+.userCard-parice {
+ position: absolute;
+ z-index: 9;
+ left: 30rpx;
+ bottom: 50rpx;
+ color: #f79210;
+ font-weight: 600;
+ font-size: 36rpx;
+}
+
+.userCard-arrow-left, .userCard-arrow-right {
+ width: 50rpx;
+ height: 50rpx;
+ position: absolute;
+ top: calc(50% - 25rpx);
+}
+
+.userCard-arrow-left {
+ right: 10rpx;
+}
+
+.userCard-arrow-right {
+ left: 10rpx;
+}
+
+.userCard-tips {
+ background: #f0f4fa;
+ border-radius: 30rpx;
+ width: 360rpx;
+ text-align: center;
+ margin: 0 auto;
+ color: #b4bbc4;
+ font-size: 26rpx;
+ padding: 14rpx 0;
+}
+
+.userCard-tips image {
+ width: 20rpx;
+ height: 20rpx;
+}
+
+.userOrder {
+ overflow: hidden;
+ margin-top: 40rpx;
+}
+
+.userOrder-label {
+ float: left;
+ width: 25%;
+ text-align: center;
+ font-size: 28rpx;
+}
+
+.userOrder-label-new .userOrder-label {
+ width: 25%;
+}
+
+.userOrder-icon {
+ width: 94rpx;
+ height: 94rpx;
+ background: #000;
+ border-radius: 50%;
+ padding: 18rpx;
+ box-sizing: border-box;
+ margin: 0 auto 10rpx;
+}
+
+.userOrder-icon.active {
+ background: #000;
+}
+
+.userOrder-icon image {
+ width: 100%;
+ height: 100%;
+}
+
diff --git a/pages/webView/webView.js b/pages/webView/webView.js
new file mode 100644
index 0000000..721259a
--- /dev/null
+++ b/pages/webView/webView.js
@@ -0,0 +1,68 @@
+// pages/webView/webView.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ url:''
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ url : decodeURIComponent(options.url)
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/webView/webView.json b/pages/webView/webView.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/webView/webView.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/webView/webView.wxml b/pages/webView/webView.wxml
new file mode 100644
index 0000000..77a6354
--- /dev/null
+++ b/pages/webView/webView.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/pages/webView/webView.wxss b/pages/webView/webView.wxss
new file mode 100644
index 0000000..baae063
--- /dev/null
+++ b/pages/webView/webView.wxss
@@ -0,0 +1 @@
+/* pages/webView/webView.wxss */
\ No newline at end of file
diff --git a/pages/welfare/welfare.js b/pages/welfare/welfare.js
new file mode 100644
index 0000000..d69a27e
--- /dev/null
+++ b/pages/welfare/welfare.js
@@ -0,0 +1,127 @@
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ noticeShow : false, //须知显示状态
+ pointMoreShow : false, //重要提示显示状态
+ groupId : '', //权益id
+ contData : '', //全局内容
+ rightData : '', //权益详情
+ content : '', //内容介绍
+ notification : '', //重要提示
+ remark : '', //使用须知
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ groupId : options.id
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+ // 获取详情
+ this.rightsInfo();
+ },
+
+ /**
+ * 详情
+ */
+ rightsInfo() {
+ wx.$api.index.welfares(this.data.groupId).then(res=>{
+ this.setData({
+ contData : res.data,
+ rightData : res.data.right,
+ remark : res.data.remark.replace(/\
{
+ if(!err.login){
+ wx.showModal({
+ title : '用户登录已过期',
+ content : '请重新登录',
+ showCancel : false,
+ success : res => {
+ if (res.confirm) {
+ wx.redirectTo({
+ url: '/pages/login/login'
+ })
+ }
+ }
+ })
+ }
+ })
+ },
+
+ /**
+ * 须知展开收起状态
+ */
+ noticeTap() {
+ this.setData({
+ noticeShow : !this.data.noticeShow
+ })
+ },
+
+ /**
+ * 重要提示展开收起状态
+ */
+ pointMoreTap() {
+ this.setData({
+ pointMoreShow : !this.data.pointMoreShow
+ })
+ },
+
+ /**
+ * 普通商品支付提交
+ */
+ ordinary() {
+ this.submitOrder();
+ this.setData({
+ disabled : true
+ })
+ },
+
+ /**
+ * 支付提交
+ */
+ submitOrder() {
+ let welfareId = this.data.contData.welfare_id
+ wx.$api.index.fridayInfo(welfareId).then(res=>{
+ wx.$api.index.fridayPay(res.data.trade_no).then(res=>{
+ let payInfo = JSON.parse(res.data)
+ wx.requestPayment({
+ timeStamp: payInfo.timeStamp,
+ nonceStr : payInfo.nonceStr,
+ package : payInfo.package,
+ paySign : payInfo.paySign,
+ signType : payInfo.signType,
+ success : res=>{
+ if(res.errMsg == "requestPayment:ok"){
+ wx.showToast({
+ title: '支付成功',
+ icon : 'success'
+ })
+ setTimeout(()=>{
+ wx.reLaunch({
+ url: '/pages/coupon/coupon?type=couponPublic'
+ })
+ },3000)
+ }
+ },
+ fail : res=>{
+ wx.reLaunch({
+ url: '/pages/order/order?stateType=unpay'
+ })
+ }
+ })
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/welfare/welfare.json b/pages/welfare/welfare.json
new file mode 100644
index 0000000..c805305
--- /dev/null
+++ b/pages/welfare/welfare.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "支付详情",
+ "navigationBarBackgroundColor": "#ededed"
+}
\ No newline at end of file
diff --git a/pages/welfare/welfare.wxml b/pages/welfare/welfare.wxml
new file mode 100644
index 0000000..026ea85
--- /dev/null
+++ b/pages/welfare/welfare.wxml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+ 重要提示
+
+
+
+
+
+ {{pointMoreShow == true ? '收起' : '展开'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{rightData.title}}
+ {{rightData.subtitle}}
+
+
+
+
+
+
+ 产品金额
+ ¥{{contData.total}}
+
+
+ 产品数量
+ 1张
+
+
+ {{contData.group_type == 'drill' ? '钻石' : '白金'}}会员抵值
+ ¥{{contData.score}}
+
+
+
+
+
+
+ 应付总金额
+ ¥{{contData.price}}
+
+
+
+
+
+
+ 支付方式
+ 微信支付
+
+
+
+
+
+
+
+
+ 购买前请仔细阅读内容介绍
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/welfare/welfare.wxss b/pages/welfare/welfare.wxss
new file mode 100644
index 0000000..a9556cd
--- /dev/null
+++ b/pages/welfare/welfare.wxss
@@ -0,0 +1,567 @@
+/* 卡券权益 */
+.welfare {
+ text-align: center;
+ width: 100%;
+ background-color: #fff;
+ padding: 30rpx;
+ box-sizing: border-box;
+}
+
+.welfareCont-top{
+ flex-wrap: wrap;
+ flex-direction: column;
+ margin: 10rpx 0;
+}
+
+.welfareCont-list-img {
+ border: 2rpx solid #eccc69;
+ border-radius: 50%;
+ width: 100rpx;
+ height: 100rpx;
+ display: inline-block;
+ margin: 0 10rpx;
+}
+
+.welfareCont-text {
+ position: relative;
+ padding: 20rpx 50rpx;
+ box-sizing: border-box;
+ width: 100%;
+ display: grid;
+ border-top: 4rpx dashed #ebcc68;
+}
+
+.welfareCont-tips {
+ background-color: #000000;
+ color: #ffd88d;
+ border-radius: 10rpx;
+ margin-top: 20rpx;
+ height: 54rpx;
+ line-height: 54rpx;
+ font-size: 27rpx;
+ display: inline-block;
+ font-weight: 600;
+ padding: 0 20rpx;
+}
+
+.welfareCont {
+ background: #fcf9e8;
+ border: 2rpx solid #eac85c;
+ border-radius: 20rpx;
+ display: inline-block;
+ text-align: center;
+ box-sizing: border-box;
+}
+
+
+.rightsNumber {
+ display: flex;
+ width: 100%;
+ margin: 30px 0 20px;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+}
+
+.rightsNumber text {
+ display: inline-block;
+ flex: 1;
+}
+
+.rightsAdd {
+ display: flex;
+}
+
+.rightsAdd-btn {
+ background: #eaeaea;
+ color: #535353;
+ border-radius: 50%;
+ text-align: center;
+ width: 50rpx;
+ height: 50rpx;
+ line-height: 45rpx;
+ font-size: 40rpx;
+ font-weight: 600;
+}
+
+.rightsAdd-input {
+ width: 100rpx;
+ text-align: center;
+ font-size: 28rpx;
+ line-height: 50rpx;
+}
+
+.rightsTips {
+ padding: 0 30rpx;
+ color: #ff5b5d;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.rightsList,
+.notice,
+.detailsStore {
+ background: white;
+ margin: 30rpx;
+ border-radius: 10rpx;
+ padding: 10rpx 0;
+ box-sizing: border-box;
+}
+
+.rightsLabel,
+.rightsLabel-pay {
+ display: flex;
+ padding: 20rpx;
+ color: #6f7880;
+ font-size: 30rpx;
+}
+
+.rightsLabel .rightsLabel-left {
+ flex: 1;
+ color: #747d86;
+}
+
+.rightsLabel-black {
+ padding-top: 30rpx;
+}
+
+.rightsLabel-range {
+ display: flex;
+ color: #000;
+ font-weight: 600;
+}
+
+.rightsLabel-row {
+ width: 38rpx;
+ height: 38rpx;
+ margin: 2rpx 0 0 6rpx;
+}
+
+.rightsLabel-black .rightsLabel-right,
+.rightsLabel-red {
+ color: #ff5b5d;
+ font-size: 32rpx;
+}
+
+.rightsLabel-black .rightsLabel-left {
+ color: #000;
+}
+
+.rightsLabel-score {
+ font-weight: 600;
+ color: #000;
+ font-size: 38rpx;
+}
+
+.rightsLabel-pay {
+ color: #000;
+}
+
+.rightsLabel-pay .rightsLabel-left {
+ flex: 1;
+}
+
+.notice {
+ padding: 20rpx;
+}
+
+.noticeTitle {
+ display: flex;
+ margin-bottom: 20rpx;
+}
+
+.noticeTitle-flex {
+ flex: 1;
+ display: flex;
+ font-size: 30rpx;
+ line-height: 46rpx;
+}
+
+.noticeTitle-img {
+ width: 46rpx;
+ height: 46rpx;
+ margin-right: 20rpx;
+}
+
+.noticeText {
+ font-size: 26rpx;
+ height: 0;
+ overflow: hidden;
+}
+
+.noticeText.active {
+ height: auto;
+}
+
+.noticeText-top {
+ margin: 30rpx 0 10rpx;
+ font-weight: 600;
+}
+
+.noticeText-cont {
+ line-height: 60rpx;
+ color: #666;
+}
+
+.noticeTitle-row {
+ width: 46rpx;
+ height: 46rpx;
+}
+
+.noticeTitle-row.active {
+ transform: rotate(90deg);
+}
+
+/* 门店 */
+.detailsStore {
+ padding: 20rpx;
+}
+
+.detailsStore-top {
+ display: flex;
+ line-height: 30rpx;
+ margin-bottom: 20rpx;
+}
+
+.detailsStore-see {
+ color: #dfae2e;
+ border: 2rpx solid #dfae2e;
+ border-radius: 10rpx;
+ font-size: 28rpx;
+ margin-top: 30rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+}
+
+.detailsStore-see text {
+ display: inline-block;
+}
+
+.detailsStore-see image {
+ width: 50rpx;
+ height: 50rpx;
+ margin-left: 10rpx;
+}
+
+/* 购买按钮 */
+.rightsBtn {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100rpx;
+ z-index: 9;
+ background: #fff;
+}
+
+.rightsBtn button,
+.rightsBtn text {
+ display: block;
+ margin: 12rpx 30rpx;
+ width: calc(100% - 60rpx) !important;
+ height: 74rpx !important;
+ line-height: 74rpx !important;
+ padding: 0;
+ background: #eacf88;
+ text-align: center;
+ border-radius: 60rpx;
+ font-size: 30rpx;
+}
+
+
+.rightsBtn.active text {
+ background: #dedede;
+ color: #888;
+}
+
+/* 选择收货地址 */
+.addressBack {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, .4);
+ z-index: 10;
+ width: 100%;
+ height: 100%;
+ display: none;
+}
+
+.addressBack.active {
+ display: block;
+}
+
+.addressCont {
+ position: fixed;
+ left: 0;
+ bottom: -1000%;
+ transition: .2s;
+ background: #fff;
+ z-index: 11;
+ width: 100%;
+}
+
+.addressCont.active {
+ bottom: 0;
+}
+
+.addressCont-title {
+ height: 90rpx;
+ line-height: 90rpx;
+ display: flex;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+
+.addressCont-left {
+ flex: 1;
+}
+
+.addressCont-right {
+ color: #309ded;
+}
+
+.header-classify {
+ white-space: nowrap;
+ box-sizing: border-box;
+ height: 600rpx;
+}
+
+.addressCont-list {
+ padding: 30rpx 20rpx;
+ box-sizing: border-box;
+ font-size: 30rpx;
+ overflow: hidden;
+ position: relative;
+}
+
+.addressCont-top {
+ display: flex;
+ margin-bottom: 10rpx;
+}
+
+.addressCont-name {
+ font-weight: 600;
+}
+
+.addressCont-text {
+ color: #666;
+ width: calc(100% - 160rpx);
+}
+
+.addressCont-list:last-child {
+ border: none;
+}
+
+.rightsLabel-address {
+ display: flex;
+}
+
+.rightsLabel-address text {
+ display: inline-block;
+ width: calc(100% - 46rpx);
+}
+
+.rightsLabel-address .rightsLabel-right {
+ display: flex;
+ font-size: 28rpx;
+}
+
+.address-tool {
+ display: flex;
+ float: right;
+}
+
+.address-tool-btn {
+ font-size: 24rpx;
+ margin-top: 20rpx;
+ border: 2rpx solid #666;
+ color: #666;
+ border-radius: 6rpx;
+ text-align: center;
+ height: 50rpx;
+ line-height: 50rpx;
+ padding: 0 20rpx;
+ margin-right: 20rpx;
+ display: flex;
+}
+
+.address-tool-btn-del {
+ color: #dfae2e;
+ border-color: #dfae2e;
+}
+
+.address-tool-icon {
+ width: 120rpx;
+ height: 54rpx;
+ line-height: 54rpx;
+ border-radius: 4rpx;
+ text-align: center;
+ color: #fff;
+ position: absolute;
+ top: 45rpx;
+ right: 10rpx;
+ background: #dfae2e;
+ transform: scale(.9, .9);
+ font-size: 24rpx;
+}
+
+.rightsPoint {
+ position: fixed;
+ left: 0;
+ bottom: 100rpx;
+ background: #fff;
+ z-index: 9;
+ width: 100%;
+ padding: 20rpx 20rpx 10rpx;
+ box-sizing: border-box;
+}
+
+.rightsPoint-cont {
+ width: 100%;
+ background: #fcf9e8;
+ border: 2rpx solid #ecd390;
+ border-radius: 10rpx;
+ position: relative;
+ max-height: 50vh;
+ overflow-y: scroll;
+}
+
+.rightsPoint-top {
+ font-size: 28rpx;
+ display: flex;
+ padding: 20rpx;
+ box-sizing: border-box;
+ font-weight: 600;
+}
+
+.rightsPoint-top image {
+ width: 36rpx;
+ height: 36rpx;
+ margin-right: 10rpx;
+}
+
+.rightsPoint-text {
+ padding: 0 20rpx;
+ box-sizing: border-box;
+ font-size: 24rpx;
+ line-height: 44rpx;
+ height: 90rpx;
+ transition: height 25s;
+ overflow: hidden;
+}
+
+.rightsPoint-text.active {
+ height: auto;
+ transition: 2s;
+}
+
+.rightsPoint-text view {
+ position: relative;
+ padding-left: 40rpx;
+}
+
+.rightsPoint-text view::after {
+ position: absolute;
+ content: '';
+ left: 10rpx;
+ top: 20rpx;
+ background: #000;
+ width: 10rpx;
+ height: 10rpx;
+ border-radius: 50%;
+}
+
+.rightsPoint-bolck {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: calc(100% - 40rpx);
+}
+
+.pointMore {
+ text-align: center;
+ width: 100%;
+ background: #fff8e5;
+ height: 80rpx;
+ line-height: 82rpx;
+ position: relative;
+ margin-top: 10rpx;
+}
+
+.pointMore::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 2rpx;
+ background: #ecd390;
+}
+
+.pointMore text {
+ font-size: 28rpx;
+ color: #c38e00;
+ animation: dong 1.8s infinite;
+ display: inline-block;
+}
+
+.pointMore image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-left: 4rpx;
+ vertical-align: -4rpx;
+ animation: dong 1.8s infinite;
+}
+
+@keyframes dong {
+ 0% {
+ transform: translate(0px, 0px);
+ }
+
+ 50% {
+ transform: translate(0px, -6rpx);
+ }
+
+ 100% {
+ transform: translate(0px, 0px);
+ }
+}
+
+.rightsCont-btn {
+ display:inline-block;
+ text-align: center;
+ background-image: linear-gradient(to right, #eaaaa8, #f4e5c2, #eaaaa8);
+ box-shadow: 0 0 10rpx rgba(233, 166, 166, .9);
+ border-radius: 30px;
+ padding: 5rpx;
+ line-height: 40rpx;
+}
+
+.rightsCont-btn text {
+ border-radius: 30px;
+ width: 100%;
+ height: 100%;
+ display: block;
+ padding: 10rpx 20rpx;
+ box-sizing: border-box;
+ background: linear-gradient(#fefcfa, #f9f0db, #f7ebcf);
+ font-size: 30rpx;
+}
+
+.webBack {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 9999;
+ background-color: #fff;
+ text-align: center;
+ display: none;
+}
+
+.webBack.active {
+ display: block;
+}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..042a07e
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,135 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "enhance": false,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": false,
+ "coverView": true,
+ "nodeModules": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "uglifyFileName": false,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "compileHotReLoad": false,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": false,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "enableEngineNative": false,
+ "bundle": false,
+ "useIsolateContext": true,
+ "useCompilerModule": true,
+ "userConfirmedUseCompilerModuleSwitch": false,
+ "userConfirmedBundleSwitch": false,
+ "packNpmManually": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.12.1",
+ "appid": "wxb2e3e8091d9feac3",
+ "projectname": "%E4%BA%BF%E6%97%B6%E4%BB%A3",
+ "debugOptions": {
+ "hidedInDevtools": []
+ },
+ "scripts": {},
+ "isGameTourist": false,
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
+ "condition": {
+ "plugin": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": [
+ {
+ "id": 0,
+ "name": "pages/user/user",
+ "pathName": "pages/user/user",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 1,
+ "name": "pages/activityInfo/activityInfo",
+ "pathName": "pages/activityInfo/activityInfo",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/activityOrder/activityOrder",
+ "pathName": "pages/activityOrder/activityOrder",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 3,
+ "name": "pages/activate/activate",
+ "pathName": "pages/activate/activate",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/index/index",
+ "pathName": "pages/index/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 5,
+ "name": "pages/login/login",
+ "pathName": "pages/login/login",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/coupon/coupon",
+ "pathName": "pages/coupon/coupon",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/frozen/frozen",
+ "pathName": "pages/frozen/frozen",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/account/account",
+ "pathName": "pages/account/account",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/packet/packet",
+ "pathName": "pages/packet/packet",
+ "query": "",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..405a12f
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,96 @@
+{
+ "setting": {},
+ "condition": {
+ "plugin": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": [
+ {
+ "id": 0,
+ "name": "pages/user/user",
+ "pathName": "pages/user/user",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 1,
+ "name": "pages/activityInfo/activityInfo",
+ "pathName": "pages/activityInfo/activityInfo",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/activityOrder/activityOrder",
+ "pathName": "pages/activityOrder/activityOrder",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 3,
+ "name": "pages/activate/activate",
+ "pathName": "pages/activate/activate",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/index/index",
+ "pathName": "pages/index/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 5,
+ "name": "pages/login/login",
+ "pathName": "pages/login/login",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "pages/coupon/coupon",
+ "pathName": "pages/coupon/coupon",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/frozen/frozen",
+ "pathName": "pages/frozen/frozen",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/account/account",
+ "pathName": "pages/account/account",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/packet/packet",
+ "pathName": "pages/packet/packet",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/welfare/welfare",
+ "pathName": "pages/welfare/welfare",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/classify/classify",
+ "pathName": "pages/classify/classify",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /dev/null
+++ b/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/static/icon/Check.png b/static/icon/Check.png
new file mode 100644
index 0000000000000000000000000000000000000000..414ff3b40fe9bd11d3af2fd496b39ab59ba3e146
GIT binary patch
literal 352
zcmV-m0iXVfP)5&jP8lXTOo;g69Sn3JlB)hZz|dWf=bb_m?<-ViVB@
zplD|Jf0^O;H%p02m%f4xc%`k)^Pht^miZ6kCXtKBpP~mWx@OKFj1K%)kG}({0~_$t
z&^-7*6Vn=o|Noz||7WrmJb&yV%n*E<;Rd``x90uJ^Y;Xw8LJCO%^O4~B$B*9iYovOWq1*ZDqIc#0000t1
zV8OjPbMH)>eyyqHbaLuJ7q^`{dRrBgetr1x`R=`^8#g^#zT#&8gzIhXm#eDJ<>Va;
z4%=gDzFt`LZ|loGpdX}4g8YIR9_fDjc>my(lkIb#M_6d8DD%%c6%{Eg*xltJmhyyw
zficq4#WBRaUUzAWz9Zx3oK+mVSANp1
zwW{$sw%SL~?e(1ZUrOqxc&zOkevtQ;knG0M+&^}_4aZop8I;A?_cb_1qat%eYg7S`^8`X
av(D5B;l2O;UOX@=7(8A5T-G@yGywpc)*BcA
literal 0
HcmV?d00001
diff --git a/static/icon/activity_icon.png b/static/icon/activity_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d54870e3ef7b171d2b7bc05fc3b89e235954819
GIT binary patch
literal 403
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyX#qYVu0Z-f?ZMRfnJa)cDV7BJ
z1v9YSuX+FFQ&$aO(~OnZ@d&pb(QPhb7E1!zhfU+*E{{>
z4%;E~Z1NL_z~+EB#}(#(mx_o5s=S!GZQg;u(vs4#y8a4{ecy{RB(m9Ve&(An&w;T&
z^z1i24S#{#j6KQ6`h?!IJTRVUe%x=t2^OW4)>|f-3p-!5o;WZ=GWqfo4@rYnhEf;O
z;(Bha*|KTl^GmBMI5$~sS#$q&$zopr
E0JO2;HUIzs
literal 0
HcmV?d00001
diff --git a/static/icon/add.png b/static/icon/add.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad2ed18c82a5f4df97c6ceea80e0e8b7bc1b6f1f
GIT binary patch
literal 198
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)S0Mc#2YBskcL*rWQ4-`A
z%wTVzknfce5hiCo6(|EaloaX$F~>kN?#EGDxqvZ&m;z-q;Fft7_VqQO&u#l}j;
zaSGE3aaoTAlCcX!H4b#?Fnkge-o?pi^{8
zg8YIRSbu(b_mZn=Y3F?(A>JrW73s?dOs=1e4?ealLt$&a-jiw7ZuXYzR!%GxpL<5v
z#*2Z0Db>@(F~sBe)Tz&BZ88vOb><2Un;z$S;N8yuuYY?rP2BWiU;UZlgcE1x_^253
z+%JCRP#}2S@4fUBUbobp7j}egmD{wFv%zTM{I|t=60Aq+Hh=oJjbX*@Z_<)?x9hQX
z<$n@(7q^I*eO-1fv+ezp{Bu|`ZulJe_n!UC(+ROWRUc2vT=pvC-c-+cu3Pu#q78pp
zB|YBV;)##Gz;fXFo`r@x%%5CX;`e$mNSXf+!j?`sUBhk6(!WLW
zOm8fkNVKM_%tFIVL066N`=%30F512lS`fCZHR0-(l&Z;3-!&$w+XpdJ|9mJt_t}#M
z*{9KrO>W!OCv0?QOP5J#K7F@(k4;fS+_RIZ-X^9oH;)KC@>V|;cxv7bjbn_8OwLma
zKFnKH9^fj`_@?t&Q}g;&=}&`oXRf+x|GTJ~+I}@AdE)nF}Ug*Gb>u>y>
z^8zm)>}!x}>${ZksH7q0>DdR%X7BIzeZ_bD^ofZxQqIWzS>k7Z;7xSZX32z^&Aio%
zW|rLA&Z2VYle=E;PN$r!Mw^q_#BSd#Fz?uS-Yd1jM%yYiv#cuZFGKu{z{gw{C#Wjz
zJlHdLP0~5mr0qWrFufN~>0hke9b(9p`6)&0@%(rDM7GT7thTi_HaluyFe|sG>Zes$
z-!|cw3(ws*YGZ!bJEiAv)bI8isvPm!f6h$|N$KVJa#f}Mkn-vuZ!=t2*QrG==PU^d
z?QoGh!9RIdP|6eCXQE2M(|i0fdUN|~R@d7rBv(irsaerk*PqxpZOM{bo618>g|sJ@
z|4o;P4cOuS$x^jp(jTV9uGtgr3zS~`)NEg5V^z0SMZ*J_P#HX3{an^LB{Ts5mQr{K
literal 0
HcmV?d00001
diff --git a/static/icon/arrow_down.png b/static/icon/arrow_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..8731b7afa50f7098ea4b617c450140e2d96c0a27
GIT binary patch
literal 279
zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s3?yAI>n{URegQrqu0Z+(^?>9-U3GySuKguC1-D`1tt9$jHRR#QgmH;Nali-rnTo
z+xuj$M+*yf8mAg4j}Qu{&;J`HkDIY
zXra3fFn@y}mw-|JN}yhDWu8W+1+cCx`%a=aOVwW%7LBO=Jf0WKQ*`Y
aZ{i2KIttEVA=h;P0000+Ajf{jaaDy1KgD+}y^-#>mLX`1ttV-rmH-#JIS)?d|RA>gw9s
z+PS&8;o;%Dyu9=C^X28`wzjt5;Na5I(#p!pIdLKM00030Nkl!f*aBZATG06n7Xju
z>_SozteaiPO<-=QO;Fqy&j^C}XB9#hK*SnatX)_<6{|$MP|_t3Jv4#pp$R`IPKc#x
zA=KUj)AZE?^MFbhFzt>JwDES~z2<}YaqLI^!2bc8Yz$}CfQ-2S0000X#qYVu0Wa&pde?;HJ~+$B|(0{
z3_@~J%3}L=@*P>be9`O^TQ{tFc=?cl2G`l|(?a}ScsN>^{uUGiD&Fhq;uzv_{OZ-a
ze9a0xtO*kiUg6}Ly=~m%sNvnKY~5?&enRo&WqYMOIi{TJ@)`;C67;$(@$M7mHgh
zCLXWIHeAgu`fx=+lXO_y5HS6pZ;U~hWHT9e;;{>E3Of_8Tm?c!!uPdM-T
zqy1;HV3Fv~DkHBQ#}0h8*5&nKw4D0q>qCcqp%)UfpEfSbQP^(MVEy4V^WFP#as>qs
zj!!e$)ohUv^N;_+Z~2D}tTn<2k#i7s`l!QrVwi_%?l3HEV7zm?Hw+zrRrz94&
z#_0tW@F2hllUSw(a!F4qwZ=J&5KA$D8qzYms0F1QClyPiOr@JqXkbdeY@eK08m&$c
zkd(t@b*gmBQ}fE*2$M}`UI7L|wWM`csfE^pN(WO=AqX_U<9h15LIW+}p-SYq!LkY;
z6Od}MnQd#pLj?x(U;?u+1rWL*1_*x#d%`9V1hzAB{J$-@qdluyR{BgKr*
z2YOplMNzeGvdWb;J+`s4^Spqyl-b^yc)uyXMm_6@e+t>g
zXVWgR1c#z>OJmE&X
z(C_9@!!)V(X0vdR+74R_e=QtE^XwrNx7eF$j{NpER?^PC9XaJ!PgDnFj6`yhGI?`Dro9XB@$
R^?Ts*2+HAQ45k;>`~$_ptKiWS0Meh&ge^(4v_p-t^c*w
z5RSgo8UY2_wAS4KD&i^$@(X6TFaBHl%#ocxZgeT^>H~`Ac)B=-Xq-=$;Azm5@pUMa
zoW-=V%!IW&Fm!`QBxhsBH-!}qj~}&iDa;b}Q4}%QP|B$&(h#Z>_ktmmVe=U;mQ@UC
z(gBFVdQ
I&MBb@0B@U0{{R30
literal 0
HcmV?d00001
diff --git a/static/icon/indexSite.png b/static/icon/indexSite.png
new file mode 100644
index 0000000000000000000000000000000000000000..11d5a8bf74994c21ba3c5bd61162836b4e1dc39a
GIT binary patch
literal 734
zcmV<40wMj0P)NWQ5G1IBrl^TLy0LHLl!0ri?LBknt#BCvS4E)WMPGk8cN<$!a_2!
z@UlS|O(`PeWh8NQbbr&&%yXZ6pC2`6^VDoH3pS!D|_Z;Yy^q|bH
z6u`{Z0#|{t6@%B*e*hhluEp%50A@BToa?j(gV)U711*yJi~N)UTnF0!F?h}VilmNg
z05jVHoc&M1Yi`y^x;4~iVFt|1i*9oXfLHpV0QnAB0UQGsme}-2+L{C~voXMDz`sRu
z2UsuZYyD!lsyBePh}}1!Ns@mDWmpExY#DIBWGBs%UKXvJ*<7Hn#I{XRZwg=oa5>_n
zPtv@y+AuQ*aF8PLzHlxD&2^vwSz8Y`z=Q8EY1{ph
ze0u&RF@U|mzOrHiys7wYY4Uy#Oit(@kmS=e3t%?z0vMfen!Ehdo0KGDsWv6z{G&hPB$bWxygm@4H?vm22g-yYIs?EuNq$t>QYiy<
z$FT~y1WXP8Jnfq#-Oi326dM8v$Kj8T6Jhx5ko2@_aMy1bppjrjHX{!38#92(A?58u
Qn*aa+07*qoM6N<$g2pCDL;wH)
literal 0
HcmV?d00001
diff --git a/static/icon/integra_icon00.png b/static/icon/integra_icon00.png
new file mode 100644
index 0000000000000000000000000000000000000000..969f0397b1699669de438f6f7f65f52660df0621
GIT binary patch
literal 508
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy?EyX^u0Zfh5de=o28dtvFH)3blg
zb^8D9-M_cD|D2fiXK%yr^(ntsMgLwF^6&lqf6veVy}k4A&8@$8l>J^4_iMiU-|HKH
zZ_2(TqW2W&6wZ<$zhH(FyeB^uD1OUh-JjFTz`!W&>Eak-aeD3Kn?;8ecwD<>)g76n
z-&gNR@&En*e)xgMK3&_V-(&A|Y+s$|_Uo5;B;U=8on=Qhw*9)djC<4fU$zUol}jYaixh|0PV|(y;!rhSNT-?kr
z4#;b*Z~QLAykMu2+ua2V*%ojJ-dnVww_98IV#ROE!1F#88WCspUBAxzdv@lXSy}1H
p`Z?Lzn~&Yy^1SSF*zTQc<=FF|Ns9#fB!eG
z{CoD^zw*U@yEpvZeEMJe+P~FH|Ni>(|HrTYPu~8wuKe@q+yCPEf3s)(O`7sIy!Y?N
zum7LF|KGp)@0ExDEe{M~G>}&q`w*C3>_WyjK^;{)Ee!&bU
zcu#&RRQ#5IO76%UWuWLoPZ!4!i_>c-U!QcyfXDTEp-@EZ(g}W?ISc>(7f-s7!XdFp
z{M_ZaCpW51Te`kqz(q}^|AI?nO~3BmgU7aiZo8MX&h(kd!8@F3UIuc5@YTnSKki5T|8VoBzBEpQf?A%jmo!9JEIDPonFV2pjI#56`gK
z3w8Z*ym3v%#KP-`yP4RB*{b2+3Xa}Rov31ch2QC@`2pRFJKMWWuW-Gx&)6RD>p}S@
z#m4IOlV3%1+hh6p!{Z#U*mpVC=YsHMh!|I*QnU|aEneU)+k%5lAaY8V(8O+8&4
zLo80Oopimd*+9Uh^@Tw5O0yl;k9_<4|GjtL1VI5gTm91p(Mx1I`;}^bOq~)sNjL3j
zbnqg@=@08|%M>^t8T6dD+i`p4yy+DmXN$N$DP8kk#ryPy*8b0?SJrlwge3f|aF%-z
z`FPszuG0;2Cw6!1OA&@K-Xxc^6#?HlO&h!TW(tJc7>7S@cXPMy@~Yi0n!Y(bHf1g2
z&9eJ?tv6>M_T9Z
ziwj+bYn1n0t*(8(zopr03RH9PRIURd4Ado_Xmvdo?6s(1hEV+B%^9-Z|0qI5y>
zte(e@`Zs*~uO9~Hy;fpd!Bu1_wv0#f=CR59V&cy4-=)u8^zd8Md&
z%$c7HRD~_RT)$QO;d$n)T}$>it?2r7>1lV`H$!fx17%XVJRhDIWL@oktFsmF{X%fEe`$<1it@+U3fTh5Vv@zFdla-(hS%NA~q
zSAJ>kJ~4mC&b$W(k#B$B-C;Lb`o!BRUG7V-%NH-2?D!^S^ES=)xjg2)@04sNO#l7K
lqE33w6aT4t5AT2EHMCM#vSqHpO<)W$c)I$ztaD0e0su}s6HfpD
literal 0
HcmV?d00001
diff --git a/static/icon/notice_icon.png b/static/icon/notice_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..0975820f7899a6bc8e50936fc512c8e5f21e6129
GIT binary patch
literal 428
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyX#qYVu0T5Y$ZT38;p#srK${dx
zg8YIRc7N*d`2BE}AOFeuC1xUPC)5@M%W-aMihOhZ(DGC#9p>(9siHu|S3F%DLo80O
zog69DtiaG!+NeZ@33Br!xS?|v)`68IO@F}vne#m#+!OEB+r|ti-l$AgH
feL*Gv_5Zx4h3Pjug@Vrj{m0gTe~DWM4f$mqG!
literal 0
HcmV?d00001
diff --git a/static/icon/order_icon_00.png b/static/icon/order_icon_00.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1e0d858bdba44f3355c611f7b2ba5b926a04e27
GIT binary patch
literal 702
zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL3?$vW53m8L`2jv5u0Z<#AO>9Jl{LD{^pV
z+McLpJkKMXHtDB>iqPNu&Aq>FE`GgdT1Spe*~EoYcdji{<(GWj|CQ^zk;}KL)NuPG
z_SnTjHUIw3Y4o|w@c!*(_ZvrS^51%tV&nu9yEr`L+z~JD@p!*#{^WJRS
zccd>fL4JPvvbTxH53v1wn{jnz|Svx$NzkOIFxMpkn
z)I{NkTz+SZ`crYat4@b(x|5iDdBV3?!Tzl3z3kkUsf!C5nI(DWGp~`Dx#8D4xwzze
zo2n~<4rG1*5Ojb^Z>dnivzKZsT5cX!`#XXA)3(QzXF9hq6(oOJ;6AnSyN;jmlY%4Z
zCZtfF8UYvPt|L06+Uw49Wa&|JYD@<);T3K0RS`!
Bk>3CS
literal 0
HcmV?d00001
diff --git a/static/icon/order_icon_01.png b/static/icon/order_icon_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..70b7f9b1d6911d14e434690e992d9cade69da831
GIT binary patch
literal 714
zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL3?$vW53m8L$pJngu0Z<#AOjbzRpWrpGAIf1
z3ugGV@%KEFbswgDe^IZ>`E@4CQ{Fe%y52v$y|~m!;lhdCTUt{RLc|ZQ$Z@yV5$3PE
z{@&owNd^YSZJsWUArXh)UVEL_WFXP-kSXZsO(v$M2K57*^Y;E<9Ub*pM{|biU$N~=
z-=E)RH*Luhg~=zs9BNA1JR@?}S+P#(EwMqaJWCS&qJFQHh}gO3c`*n3c`nX-1_y*V
z?|o#|U7g^cA~feyqv@+xr(%9B1<8#H-e;TPI#;wcb%+ZT0Qo#ML1Q6N>-*&lk8J-@W^fL&C%0HwJ>T
zv5JXCN#8RVIpd$d(H0kS6WzP}w2+8edrwz?#&4e5J10U!G>+@e*fE{qhs^%P4Riin
zx%E`Fv32>^Q^|)u`?Cnd>D^ph`-b6QRz1tNO%;EbKNM`VjF*~I^(Jfy=kzJse!J{q
z1kU?T+n#%TmcdPz9=$)wA9e)Ks(rR$%eBVVn6sZbv!1K{6MT8_ujGvbY-Sr8A0`(5
zbvSTm;Ux#Pb$7R}jXp7VCQCBg4X-9?j~&wzjM|G09fP6`Zt4YUUwSYhYSzUI>o|>O
d`mBE~%y-IRa(-Ry0buMic)I$ztaD0e0suh0o+$tT
literal 0
HcmV?d00001
diff --git a/static/icon/order_icon_02.png b/static/icon/order_icon_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..b70aeddfb32660e7a426c591d68f0519cca2412a
GIT binary patch
literal 1033
zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL3?$vW53m8Lr2#%6u0Z<#pa(ntJ`M#s)T|`P
zFPPzrxs{|c3lGQdH{0)>Dpvo{l&T}}^2xCtf6X6@k`C@!of8}3Bz9)nMAs{`yiD3E
z4dicJ*rc(zKP#Mpf$6TNi(^Q{;kPqhPFiFj&~TXPVVZ?(r0db*J#No$?D@Yq_u@g8
zlrr-v3$wDi--j=Goc??Zw~2wl2VTQPGnGzcY#0Cjs`wIP_AHL7$?2DRXDX`go3Kvi
zsE}QWnD(lUAL3tlLk*W*sMb;HTbSL%5_v#JnQ@-On$E7xo3`I>{=qZ(PVMl?@j6SJuxk*J>O%J#QGg&CTwe23Z1j}
zzvA!|dM~@oS25c1(b+>;Dcas^Y7O50SQh*9b^Fn0f6O?2y5l)!KI!kOUB$a%TD+6|
zv*e_+tnUN&|2N*c<@gcr5BpB+@9#Ir(TV3_f86w>yZKY*wdM%T`SX4Y{deFkxtVl%
zLCn*xv)4mbPS8Hb>Add8jW1f#kxBbC%Qon2G~CLOUhVd&%yo^?InGJSdBz>=g}iUK
z^!WXfH~pm^%?pegE{y|Yl=&^I{kLMR-Pf67VoV~@lul#^glIW%nH@zY!OfFMyYSPQT
zGD$e}hy0PdSF)Cv$*sS(aE6Y{k;j|1KA1RRi{$;i;gbKId6aKWU8~tIvc&h`;SX9F
z?8O}2zd{2gUg#Y5m%Dj4+VMz(vDCD++oz--35;Fj(s5PPY{&rAfGpy~*KX
z=FUaB9=(zkub)NQ?zypmFXo=7tJJpeTRfMefBbFQwa|6`x4
fu(7f6{o#B+22FAIgZuXYvkHT!tDnm{r-UW|S3x&Q
literal 0
HcmV?d00001
diff --git a/static/icon/refresh_loding.gif b/static/icon/refresh_loding.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5bb90fd6a49107a321c35b9cee4a7b810314b51f
GIT binary patch
literal 1787
zcmZXTYfw{X9>&iJhvXcHF*h)T1OnEW1i^?zgDfop1p?usL*#PMGT;HQkSO{q6FlJyb$PWkPf|h*eTST}7h8z$}MF(XD(aQ)ZLZ
zM?v0rT<1C4XHn<6PbNA{XL@>1^)apdD_@tcYDrW#m`k#MmslI7p^P;Az74wGs`!SI
zLs$GEZHsafXsu1i-WleMzAL(yw$-LK{0hv;6hrx8kx!!4$``dAyBnY9Jz&DqJo2$A
z!(L$H=KqBeY~CF_viHPz^tTglc?D97CqEBjzUwH}7GI
zapg8YZM~>2Wk%E$d&r@9ly9b4Q
zJpM7T@}r63I(OExUlG%Xcjz3MU+9U^r!SkpjNThDtaP)7>j6L5z%o5|^hlVOyI*uY
zt^UU6NTuY?(Lb4ZIU2Zb5Vz}Pb7KF%ivf&j^CL>$cDz?rMNTQQ|NqDVD7mhghUp%h
zhIA{gi{S8y9YhIIbSv$`B!JiPi!0#4#Jge0)p&YVPHchWcyAn
zQhvb8ggXGXs9;k`u9Uq*YB>O+Q3Rq=2hlLFcG{Q3ORH_}JnY8C+r%@}6|%ySP%bWG
zV~mA;?P`Q2L_Ss})nrJ{$TmeA9Tt*4=}X5x%RioM@_?ZsKSEST-f+GBv~Ya)xX3O{
z8!d=YthI-13OI;RN~`>|6u5L{z20oBp%9MIj)n$!Aw{Wpq&Rtr4~*_74Gjo@3el>B
zz(Rk;;>2lp73<2;d=r*8z%WkdsG=vRuG_fvxO#uN^El|+5Qoz^X!2MfxJ3m}vyi?>
zMLLDi8+${Z6YbUg?8GNR>-+SwHKdFyr%HqWcs|X_l*-DAC^bG&KCqWg7-_`UlwQ`EdOp_LJkr`L$mHHs75uP?fSgVfsDjuE#ft2b8HDt0yFt!+;C
zEgL=)G9ZFt4wa+N3Xg7FGc0~`&EEt6_%7tyzmnb9B_h1~7~GD4V-Bhx7~QKRkF>&aT>(-!Us@aJxAY@8E?HW$G8g
zSz@7Jcp>iCp;lU1ieF6n7!oAa-1E!rS0
zF1lBFVS%G#ZO}b@*+bIk+7@Q|iG60vIDVpV%4tW8rKyzwRo_<25;8*Ky@n
z-sX>W*b;M){5lB_Edc@m1`VHy0@dg$PTR9uE$O2&a?KAe?xRlCj&Z$iZYwbIt5FD{DK*}e>iEpo%Ye-d7R{i`kX+12t#hWYKR`iHx%iy4Zme9`B)y&~&QUGz51WBuu+n+64WF1=zI+y(
ikpAFNN}9wv28O@kOc@*Y-na-fjKR~@&t;ucLK6UoT~74?
literal 0
HcmV?d00001
diff --git a/static/icon/secrch_icon.png b/static/icon/secrch_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..edd6bd6edb646c962ade3784a73bd294a76829ce
GIT binary patch
literal 1009
zcmVQchC~gMIl&n+
zU|A`1QugG|9^lx?P57#$X-GX34cfY&gb0ajB$18gLFK6c00QkvL_t(o!|j*Za_TS)
zh81Vu6Cfl&wz3xL_kX_ABd5T0f@7=YqBDG#ndFcBOO|YS@j{n#-qee^VSZxFD>q(+
z@Cy`PFz4S`?wX%!=Z?)sG4~AUtOEX+wc}H*b+{b+(gT5aj8T3i-Dz?UYz<^N$o
zpuy?>sBQKoIeWGIXy~99l+m=7H^!I~E7_ZvJ-vZ-K^*^!sWP`C(thTRtZHUBok#)C
zi^)^0of90MxJpKt-em|Hh-DhRLNnntsB^5Qj)X`r?o1gdBQD*6+VJ9b42pd4TMet2
zG0Rn_Gt#IP4=TrsS0?o)o-W1evgy3JT%fqT$QZ)AxD*^to)l}|Xn@ce=K(u3qXtS2cUJ3xJGWf2+$FR3v3J6shj`805t{S)~
zKvcfbNA1a3SY=sSR<-e1dIV%l*=*sb5Mn0MnuGEmiuo@qch6GZ!n2g&_hBYp%$`7J
fnNWdP)Zqrh%92qJ451tw)A
zmDHdbG)fU_QqV=q23cB=W)ZJ^8}`}k^PgYOKKu*LU~|5;*88o?yVf_!1k0oe_U}>w
zOvak>n~iz6fK&JhpW##dGv14h7r=ZxjZK&`!1!Ny8#{4w5RgFtuEaBV47q*eKYWF6
z@dK_Xk+=~n%6HEFjpwkt=(J)P3&3=|Q^FnPU-1YI;mgDmLR$X64zJu@9Xg$uEjyzHKg-O{k>8fXR!dMt3R3%*pCNF
z1urc9-35kl#`mR@Ud2Og0Mg&TwGiwyy%Rrlf
zCrZKh)W8OOP#oWcZ#o8XbFH=4;iF~*GK79ZCSmycVwH9%v6--kjx*~2Z34)5cp!Wb
zmRf|LI|5Lr;`m4kE=qG2Ov8`JV$mfZWU;vuS=Z*)_lmZ0TpynqqnYW$$e8xp09;*`
zhgHSvFgrnXt7Rq|)@q!u-=^P6mLmBAOUmJ}WcI=F*2E3iS6j)_QMpj2ZI6t#l%^Zr
zt*vI~@Cw3a$NJ=Cd7;{ekw``^YbmYlr!|wqOs{G!&wp7mGp@5_=C5Vk75YyDM00000
LNkvXXu0mjfJ%V@}
literal 0
HcmV?d00001
diff --git a/static/icon/select_avtive.png b/static/icon/select_avtive.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc76782bccc49fdbf6a7bf1f020d79b2149d43d7
GIT binary patch
literal 404
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyu>n3Iu0Z;0oe_=Dg!MZ$ffmS>
z1o;IsJdpYQ@droP4KFv-2y;9?ll#cqUGDhdoBNm4mTf)9caMRA@rI|1
zV~EG`tCMf;TI9gfl3T{YYR+P_?)cC9{{@#HJkhZ*ea`7%bCbWSbG<^1ehV5LZ>{fK
z)O}xVe#`sY%*^XH{tW+dH@PL_q1A0}lEAm}Sy;Io*xre(*=@4!Mtxl1YNo9RKfToy6&w
zogvTIyy@P%$Xy1(tbBjpvUT72UaVtQ>zco+h5vh;)&raOtX9l>9kL@OmY3%Gr!Bj1YQ@Uhh)dcl3Y)W+
zn(JviShhIzjr8IbaR)XpmGNG6^~Q&+rPHP@7CJxcZBym}>)s5v3GaU|-rRdI
z|5=9n>vTbAt=`K`>QFXV7r$Oe*NHc$|VfFeLO++YBdVmy`K2GlQA666=m;BbKT
zR!#u(y7`(4ySB`%iU0ZN((>XM6AAHZf#R7!RW+V2jv*GOuU@nkYgOQJy|{ow>EFH2
z^MCSRxv{|e9b(r{u55EMb1D9Yfs>Ho4t_>*UfzSz`if_(7_WIU;Pc#vs`-gf5L5_JvAS=DwO9je}A-Bb;nxe
e8$lP2M=^$&@NF{a58n@T2ZN`ppUXO@geCyxyk+(P
literal 0
HcmV?d00001
diff --git a/static/icon/tel.png b/static/icon/tel.png
new file mode 100644
index 0000000000000000000000000000000000000000..744f34e664860eceb599a7e88bd42863cd162f10
GIT binary patch
literal 820
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s?EyX^u0ZUM&pQRUg+_tS3
zStop5(d_W6#_OA{!**t^a!|T%x$W?(>^ARzDy=TZt{pt$5cXfzekqX*CwuT&hD1)vu`Y5
z{*|$4q2zJ4XXkh9IL))M*k_fh#bufOO*{Eb)Dv4XUTpci@Q&`qy*&QA!tPC6?W)R-+%LMKGAZU3iE7J^FL+SMxD(%%KpD)&FZO!E6=^Y
z8@tDSHK(voonYM&A>|;^Hm#!^qQ8If|8Nr(d8*mvmufg;qg~E6cguzio?`lqEEC+{
z{ZnDdNY7MK@R`$MJ0XoPlI2b8U-ttxbF$SQWZ0WCh<@H4b^i8C&J3LQug$;z$Nb&3|vC|j+-Y+aV~f@U0L&4h}KMT&I1$9EYhyax^wfd
zTtnSIF$dilCuTo*apuWu#)$dXPCML6FJ1rj<#P$u6&uc-73J?gSu^$YJ)XE~?z78M
zu3b4N{PynOqa}-MSTu^i+CNK;+;vjX#=G%v*@Ugv{@9$T2sxz?_2*)Xj#g~q9KQNQ
znGl_x+#_Ab_x7~PPrsAE^fGME@x7~y=SnSpttTws^MmQ(G>uTDHxI;tamV24>gTe~
HDWM4f>)jk5
literal 0
HcmV?d00001
diff --git a/static/img/activate-back.jpg b/static/img/activate-back.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..90deb1db1c0e36f5d41bd98ccbffb37f68135b65
GIT binary patch
literal 38035
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