From b3b4d4dae798739766e00673233fc331d3c16483 Mon Sep 17 00:00:00 2001 From: zhangjing Date: Wed, 21 Jun 2023 17:14:39 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B0=B4=E6=84=9F=E5=BA=94=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E6=9C=80=E6=96=B0]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 31 ++ .gitignore | 2 + README.MD | 1 + api/err.js | 49 ++ api/index.js | 39 ++ api/interfaces/auth.js | 38 ++ api/interfaces/file.js | 17 + api/interfaces/health.js | 68 +++ api/interfaces/index.js | 41 ++ api/interfaces/mall.js | 65 +++ api/interfaces/order.js | 50 ++ api/interfaces/site.js | 58 +++ api/interfaces/user.js | 49 ++ api/request.js | 139 +++++ api/updateToken.js | 21 + app.js | 57 +++ app.json | 73 +++ app.wxss | 70 +++ pages/health/article/article.js | 140 +++++ pages/health/article/article.json | 5 + pages/health/article/article.wxml | 40 ++ pages/health/article/article.wxss | 102 ++++ pages/health/collect/collect.js | 71 +++ pages/health/collect/collect.json | 4 + pages/health/collect/collect.wxml | 24 + pages/health/collect/collect.wxss | 62 +++ pages/health/index.js | 87 ++++ pages/health/index.json | 4 + pages/health/index.wxml | 33 ++ pages/health/index.wxss | 101 ++++ pages/health/praise/praise.js | 71 +++ pages/health/praise/praise.json | 4 + pages/health/praise/praise.wxml | 24 + pages/health/praise/praise.wxss | 62 +++ pages/index-老版/assess/assess.js | 193 +++++++ pages/index-老版/assess/assess.json | 4 + pages/index-老版/assess/assess.wxml | 75 +++ pages/index-老版/assess/assess.wxss | 344 +++++++++++++ pages/index-老版/index.js | 67 +++ pages/index-老版/index.json | 4 + pages/index-老版/index.wxml | 37 ++ pages/index-老版/index.wxss | 140 +++++ pages/index/assess/assess.js | 235 +++++++++ pages/index/assess/assess.json | 4 + pages/index/assess/assess.wxml | 75 +++ pages/index/assess/assess.wxss | 344 +++++++++++++ pages/index/index.js | 116 +++++ pages/index/index.json | 4 + pages/index/index.wxml | 30 ++ pages/index/index.wxss | 125 +++++ pages/login/agreement/agreement.js | 42 ++ pages/login/agreement/agreement.json | 3 + pages/login/agreement/agreement.wxml | 3 + pages/login/agreement/agreement.wxss | 5 + pages/login/index.js | 140 +++++ pages/login/index.json | 6 + pages/login/index.wxml | 31 ++ pages/login/index.wxss | 119 +++++ pages/login/personal/personal.js | 77 +++ pages/login/personal/personal.json | 4 + pages/login/personal/personal.wxml | 46 ++ pages/login/personal/personal.wxss | 147 ++++++ pages/mall/confirm/confirm.js | 220 ++++++++ pages/mall/confirm/confirm.json | 4 + pages/mall/confirm/confirm.wxml | 81 +++ pages/mall/confirm/confirm.wxss | 315 ++++++++++++ pages/mall/coupon/coupon.js | 92 ++++ pages/mall/coupon/coupon.json | 4 + pages/mall/coupon/coupon.wxml | 52 ++ pages/mall/coupon/coupon.wxss | 182 +++++++ pages/mall/details/details.js | 314 ++++++++++++ pages/mall/details/details.json | 4 + pages/mall/details/details.wxml | 144 ++++++ pages/mall/details/details.wxss | 545 ++++++++++++++++++++ pages/mall/index.js | 32 ++ pages/mall/index.json | 4 + pages/mall/index.wxml | 67 +++ pages/mall/index.wxss | 194 +++++++ pages/mall/list/list.js | 62 +++ pages/mall/list/list.json | 4 + pages/mall/list/list.wxml | 31 ++ pages/mall/list/list.wxss | 121 +++++ pages/mall/webView/webView.js | 68 +++ pages/mall/webView/webView.json | 3 + pages/mall/webView/webView.wxml | 1 + pages/mall/webView/webView.wxss | 1 + pages/mall/商品老版本/index.js | 32 ++ pages/mall/商品老版本/index.json | 4 + pages/mall/商品老版本/index.wxml | 39 ++ pages/mall/商品老版本/index.wxss | 169 +++++++ pages/order/details/details.js | 133 +++++ pages/order/details/details.json | 4 + pages/order/details/details.wxml | 94 ++++ pages/order/details/details.wxss | 234 +++++++++ pages/order/index.js | 141 ++++++ pages/order/index.json | 4 + pages/order/index.wxml | 66 +++ pages/order/index.wxss | 174 +++++++ pages/order/logistic/logistic.js | 43 ++ pages/order/logistic/logistic.json | 4 + pages/order/logistic/logistic.wxml | 44 ++ pages/order/logistic/logistic.wxss | 141 ++++++ pages/pay/index.js | 111 ++++ pages/pay/index.json | 4 + pages/pay/index.wxml | 23 + pages/pay/index.wxss | 86 ++++ pages/report/detail/detail.js | 155 ++++++ pages/report/detail/detail.json | 5 + pages/report/detail/detail.wxml | 388 ++++++++++++++ pages/report/detail/detail.wxss | 619 +++++++++++++++++++++++ pages/report/index.js | 118 +++++ pages/report/index.json | 4 + pages/report/index.wxml | 43 ++ pages/report/index.wxss | 104 ++++ pages/report/share/share.js | 193 +++++++ pages/report/share/share.json | 5 + pages/report/share/share.wxml | 40 ++ pages/report/share/share.wxss | 165 ++++++ pages/site/add/add.js | 178 +++++++ pages/site/add/add.json | 4 + pages/site/add/add.wxml | 44 ++ pages/site/add/add.wxss | 79 +++ pages/site/edit/edit.js | 227 +++++++++ pages/site/edit/edit.json | 4 + pages/site/edit/edit.wxml | 52 ++ pages/site/edit/edit.wxss | 99 ++++ pages/site/index.js | 76 +++ pages/site/index.json | 4 + pages/site/index.wxml | 37 ++ pages/site/index.wxss | 116 +++++ pages/user/about/about.js | 28 + pages/user/about/about.json | 4 + pages/user/about/about.wxml | 7 + pages/user/about/about.wxss | 30 ++ pages/user/code/code.js | 185 +++++++ pages/user/code/code.json | 4 + pages/user/code/code.wxml | 35 ++ pages/user/code/code.wxss | 148 ++++++ pages/user/help/help.js | 51 ++ pages/user/help/help.json | 4 + pages/user/help/help.wxml | 114 +++++ pages/user/help/help.wxss | 56 ++ pages/user/index.js | 140 +++++ pages/user/index.json | 6 + pages/user/index.wxml | 182 +++++++ pages/user/index.wxss | 451 +++++++++++++++++ pages/user/setup/setup.js | 154 ++++++ pages/user/setup/setup.json | 4 + pages/user/setup/setup.wxml | 86 ++++ pages/user/setup/setup.wxss | 173 +++++++ project.config.json | 55 ++ project.private.config.json | 78 +++ sitemap.json | 7 + static/icons/arrowWrite.png | Bin 0 -> 1949 bytes static/icons/arrow_more.png | Bin 0 -> 1543 bytes static/icons/goodsShare.png | Bin 0 -> 571 bytes static/icons/homeBlack.png | Bin 0 -> 1396 bytes static/icons/homeWrite.png | Bin 0 -> 1364 bytes static/icons/loadingGif.gif | Bin 0 -> 222205 bytes static/icons/orderArrow.png | Bin 0 -> 728 bytes static/icons/orderArrow_active.png | Bin 0 -> 1519 bytes static/icons/refresh_loding.gif | Bin 0 -> 1787 bytes static/icons/reportColse.png | Bin 0 -> 838 bytes static/icons/reportColse_grey.png | Bin 0 -> 1584 bytes static/icons/returnBlack.png | Bin 0 -> 1255 bytes static/icons/returnBlue.png | Bin 0 -> 1308 bytes static/icons/returnWrite.png | Bin 0 -> 1252 bytes static/icons/siteDel.png | Bin 0 -> 2268 bytes static/icons/siteEdit.png | Bin 0 -> 1591 bytes static/icons/siteIcon.png | Bin 0 -> 1411 bytes static/icons/vipArrow.png | Bin 0 -> 2109 bytes static/imgs/address.png | Bin 0 -> 323 bytes static/imgs/cont_null.png | Bin 0 -> 14064 bytes static/imgs/text_null.png | Bin 0 -> 12825 bytes static/imgs/userHead.png | Bin 0 -> 10340 bytes static/report/report-face.png | Bin 0 -> 1228 bytes static/report/report-picture.png | Bin 0 -> 512 bytes static/report/shareLine.png | Bin 0 -> 857 bytes static/tabBarIcon/tabBar_00.png | Bin 0 -> 2285 bytes static/tabBarIcon/tabBar_01.png | Bin 0 -> 1963 bytes static/tabBarIcon/tabBar_02.png | Bin 0 -> 1643 bytes static/tabBarIcon/tabBar_03.png | Bin 0 -> 2580 bytes static/tabBarIcon/tabBar_selected_00.png | Bin 0 -> 2923 bytes static/tabBarIcon/tabBar_selected_01.png | Bin 0 -> 4255 bytes static/tabBarIcon/tabBar_selected_02.png | Bin 0 -> 2671 bytes static/tabBarIcon/tabBar_selected_03.png | Bin 0 -> 3344 bytes utils/util.js | 19 + 187 files changed, 12997 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 README.MD create mode 100644 api/err.js create mode 100644 api/index.js create mode 100644 api/interfaces/auth.js create mode 100644 api/interfaces/file.js create mode 100644 api/interfaces/health.js create mode 100644 api/interfaces/index.js create mode 100644 api/interfaces/mall.js create mode 100644 api/interfaces/order.js create mode 100644 api/interfaces/site.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/health/article/article.js create mode 100644 pages/health/article/article.json create mode 100644 pages/health/article/article.wxml create mode 100644 pages/health/article/article.wxss create mode 100644 pages/health/collect/collect.js create mode 100644 pages/health/collect/collect.json create mode 100644 pages/health/collect/collect.wxml create mode 100644 pages/health/collect/collect.wxss create mode 100644 pages/health/index.js create mode 100644 pages/health/index.json create mode 100644 pages/health/index.wxml create mode 100644 pages/health/index.wxss create mode 100644 pages/health/praise/praise.js create mode 100644 pages/health/praise/praise.json create mode 100644 pages/health/praise/praise.wxml create mode 100644 pages/health/praise/praise.wxss create mode 100644 pages/index-老版/assess/assess.js create mode 100644 pages/index-老版/assess/assess.json create mode 100644 pages/index-老版/assess/assess.wxml create mode 100644 pages/index-老版/assess/assess.wxss create mode 100644 pages/index-老版/index.js create mode 100644 pages/index-老版/index.json create mode 100644 pages/index-老版/index.wxml create mode 100644 pages/index-老版/index.wxss create mode 100644 pages/index/assess/assess.js create mode 100644 pages/index/assess/assess.json create mode 100644 pages/index/assess/assess.wxml create mode 100644 pages/index/assess/assess.wxss create mode 100644 pages/index/index.js create mode 100644 pages/index/index.json create mode 100644 pages/index/index.wxml create mode 100644 pages/index/index.wxss create mode 100644 pages/login/agreement/agreement.js create mode 100644 pages/login/agreement/agreement.json create mode 100644 pages/login/agreement/agreement.wxml create mode 100644 pages/login/agreement/agreement.wxss create mode 100644 pages/login/index.js create mode 100644 pages/login/index.json create mode 100644 pages/login/index.wxml create mode 100644 pages/login/index.wxss create mode 100644 pages/login/personal/personal.js create mode 100644 pages/login/personal/personal.json create mode 100644 pages/login/personal/personal.wxml create mode 100644 pages/login/personal/personal.wxss create mode 100644 pages/mall/confirm/confirm.js create mode 100644 pages/mall/confirm/confirm.json create mode 100644 pages/mall/confirm/confirm.wxml create mode 100644 pages/mall/confirm/confirm.wxss create mode 100644 pages/mall/coupon/coupon.js create mode 100644 pages/mall/coupon/coupon.json create mode 100644 pages/mall/coupon/coupon.wxml create mode 100644 pages/mall/coupon/coupon.wxss create mode 100644 pages/mall/details/details.js create mode 100644 pages/mall/details/details.json create mode 100644 pages/mall/details/details.wxml create mode 100644 pages/mall/details/details.wxss create mode 100644 pages/mall/index.js create mode 100644 pages/mall/index.json create mode 100644 pages/mall/index.wxml create mode 100644 pages/mall/index.wxss create mode 100644 pages/mall/list/list.js create mode 100644 pages/mall/list/list.json create mode 100644 pages/mall/list/list.wxml create mode 100644 pages/mall/list/list.wxss create mode 100644 pages/mall/webView/webView.js create mode 100644 pages/mall/webView/webView.json create mode 100644 pages/mall/webView/webView.wxml create mode 100644 pages/mall/webView/webView.wxss create mode 100644 pages/mall/商品老版本/index.js create mode 100644 pages/mall/商品老版本/index.json create mode 100644 pages/mall/商品老版本/index.wxml create mode 100644 pages/mall/商品老版本/index.wxss create mode 100644 pages/order/details/details.js create mode 100644 pages/order/details/details.json create mode 100644 pages/order/details/details.wxml create mode 100644 pages/order/details/details.wxss create mode 100644 pages/order/index.js create mode 100644 pages/order/index.json create mode 100644 pages/order/index.wxml create mode 100644 pages/order/index.wxss create mode 100644 pages/order/logistic/logistic.js create mode 100644 pages/order/logistic/logistic.json create mode 100644 pages/order/logistic/logistic.wxml create mode 100644 pages/order/logistic/logistic.wxss create mode 100644 pages/pay/index.js create mode 100644 pages/pay/index.json create mode 100644 pages/pay/index.wxml create mode 100644 pages/pay/index.wxss create mode 100644 pages/report/detail/detail.js create mode 100644 pages/report/detail/detail.json create mode 100644 pages/report/detail/detail.wxml create mode 100644 pages/report/detail/detail.wxss create mode 100644 pages/report/index.js create mode 100644 pages/report/index.json create mode 100644 pages/report/index.wxml create mode 100644 pages/report/index.wxss create mode 100644 pages/report/share/share.js create mode 100644 pages/report/share/share.json create mode 100644 pages/report/share/share.wxml create mode 100644 pages/report/share/share.wxss create mode 100644 pages/site/add/add.js create mode 100644 pages/site/add/add.json create mode 100644 pages/site/add/add.wxml create mode 100644 pages/site/add/add.wxss create mode 100644 pages/site/edit/edit.js create mode 100644 pages/site/edit/edit.json create mode 100644 pages/site/edit/edit.wxml create mode 100644 pages/site/edit/edit.wxss create mode 100644 pages/site/index.js create mode 100644 pages/site/index.json create mode 100644 pages/site/index.wxml create mode 100644 pages/site/index.wxss create mode 100644 pages/user/about/about.js create mode 100644 pages/user/about/about.json create mode 100644 pages/user/about/about.wxml create mode 100644 pages/user/about/about.wxss create mode 100644 pages/user/code/code.js create mode 100644 pages/user/code/code.json create mode 100644 pages/user/code/code.wxml create mode 100644 pages/user/code/code.wxss create mode 100644 pages/user/help/help.js create mode 100644 pages/user/help/help.json create mode 100644 pages/user/help/help.wxml create mode 100644 pages/user/help/help.wxss create mode 100644 pages/user/index.js create mode 100644 pages/user/index.json create mode 100644 pages/user/index.wxml create mode 100644 pages/user/index.wxss create mode 100644 pages/user/setup/setup.js create mode 100644 pages/user/setup/setup.json create mode 100644 pages/user/setup/setup.wxml create mode 100644 pages/user/setup/setup.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 sitemap.json create mode 100644 static/icons/arrowWrite.png create mode 100644 static/icons/arrow_more.png create mode 100644 static/icons/goodsShare.png create mode 100644 static/icons/homeBlack.png create mode 100644 static/icons/homeWrite.png create mode 100644 static/icons/loadingGif.gif create mode 100644 static/icons/orderArrow.png create mode 100644 static/icons/orderArrow_active.png create mode 100644 static/icons/refresh_loding.gif create mode 100644 static/icons/reportColse.png create mode 100644 static/icons/reportColse_grey.png create mode 100644 static/icons/returnBlack.png create mode 100644 static/icons/returnBlue.png create mode 100644 static/icons/returnWrite.png create mode 100644 static/icons/siteDel.png create mode 100644 static/icons/siteEdit.png create mode 100644 static/icons/siteIcon.png create mode 100644 static/icons/vipArrow.png create mode 100644 static/imgs/address.png create mode 100644 static/imgs/cont_null.png create mode 100644 static/imgs/text_null.png create mode 100644 static/imgs/userHead.png create mode 100644 static/report/report-face.png create mode 100644 static/report/report-picture.png create mode 100644 static/report/shareLine.png create mode 100644 static/tabBarIcon/tabBar_00.png create mode 100644 static/tabBarIcon/tabBar_01.png create mode 100644 static/tabBarIcon/tabBar_02.png create mode 100644 static/tabBarIcon/tabBar_03.png create mode 100644 static/tabBarIcon/tabBar_selected_00.png create mode 100644 static/tabBarIcon/tabBar_selected_01.png create mode 100644 static/tabBarIcon/tabBar_selected_02.png create mode 100644 static/tabBarIcon/tabBar_selected_03.png create mode 100644 utils/util.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..115cc02 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,31 @@ +/* + * Eslint config file + * Documentation: https://eslint.org/docs/user-guide/configuring/ + * Install the Eslint extension before using this feature. + */ +module.exports = { + env: { + es6: true, + browser: true, + node: true, + }, + ecmaFeatures: { + modules: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + globals: { + wx: true, + App: true, + Page: true, + getCurrentPages: true, + getApp: true, + Component: true, + requirePlugin: true, + requireMiniProgram: true, + }, + // extends: 'eslint:recommended', + rules: {}, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a70bc78 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/unpackage +/node_modules diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..018d5fa --- /dev/null +++ b/README.MD @@ -0,0 +1 @@ +# 水感应用户端小程序 diff --git a/api/err.js b/api/err.js new file mode 100644 index 0000000..667fb74 --- /dev/null +++ b/api/err.js @@ -0,0 +1,49 @@ + +/** + * 处理错误信息 + * @property {Object} errInfo + */ + +const errInfo = (obj) =>{ + if(obj.status_code == 401){ + // 清理客户端登录缓存 + // wx.removeStorageSync("") + wx.removeStorage({ + key : "token", + success: () => { + wx.navigateTo({ + url: "/pages/login/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..2d57142 --- /dev/null +++ b/api/index.js @@ -0,0 +1,39 @@ +/* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +// 授权登录 +import auth from "./interfaces/auth" + +// 图片上传 +import file from "./interfaces/file" + +// 皮肤健康知识 +import health from "./interfaces/health" + +// 首页 +import index from "./interfaces/index" + +// 产品 +import mall from "./interfaces/mall" + +// 订单 +import order from "./interfaces/order" + +// 地址管理 +import site from "./interfaces/site" + +// 个人中心 +import user from "./interfaces/user" + +export default { + auth, + file, + health, + index, + mall, + order, + site, + user +} \ No newline at end of file diff --git a/api/interfaces/auth.js b/api/interfaces/auth.js new file mode 100644 index 0000000..b446f68 --- /dev/null +++ b/api/interfaces/auth.js @@ -0,0 +1,38 @@ +/* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +//验证码登录 +const login = data => req({ + url: "user/socialite/login/wechat/mini", + method: "POST", + data: data +}) + +//获取openid +const codeOpenid = data => req({ + url: "user/auth/mini_openid", + data: data +}) + +//更新基本信息 +const userAdd = data => req({ + url: "user/setting/update_info", + method: "POST", + data: data +}) + +//隐私+协议 +const registeragree = (website) => req({ + url: "cms/pages/" + website +}) + +export default ({ + login, + codeOpenid, + userAdd, + registeragree +}) \ No newline at end of file diff --git a/api/interfaces/file.js b/api/interfaces/file.js new file mode 100644 index 0000000..fac4898 --- /dev/null +++ b/api/interfaces/file.js @@ -0,0 +1,17 @@ +/* + * 图图片上传公用接口 +*/ +import { upload } from "../request" + +//图上传 +const uploadImg = (imgPaht, data) => upload({ + url: "storage/upload", + method: "POST", + key: "upload", + path: imgPaht, + data: data +}) + +export default ({ + uploadImg +}) \ No newline at end of file diff --git a/api/interfaces/health.js b/api/interfaces/health.js new file mode 100644 index 0000000..858313f --- /dev/null +++ b/api/interfaces/health.js @@ -0,0 +1,68 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +// 健康分类 +const healthNav = () => req({ + url: "cms/categories" +}) + +// 健康列表 +const healthList = data => req({ + url: "cms/articles", + data: data +}) + +// 健康详情 +const healthSee = (article_id) => req({ + url: "cms/articles/" + article_id +}) + +// 健康收藏 +const favorite = (article_id) => req({ + url: "cms/articles/favorite/" + article_id +}) + +// 健康点赞 +const subscribe = (article_id) => req({ + url: "cms/articles/subscribe/" + article_id +}) + +// 我的-健康收藏 +const myFavorite = data => req({ + url: "user/favorites", + data: data +}) + +// 我的-健康点赞 +const mySubscribe = data => req({ + url: "user/subscriptions", + data: data + +}) + +// 我的-检测结果列表 +const aiList = data => req({ + url: "ai/images", + data: data +}) + +// 我的-检测结果 +const aiSee = (image_id) => req({ + url: "ai/images/" + image_id +}) + +export default ({ + healthNav, + healthList, + healthSee, + favorite, + subscribe, + myFavorite, + mySubscribe, + aiList, + aiSee +}) \ No newline at end of file diff --git a/api/interfaces/index.js b/api/interfaces/index.js new file mode 100644 index 0000000..67783dc --- /dev/null +++ b/api/interfaces/index.js @@ -0,0 +1,41 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req, upload } from "../request" + +// 是否可以检测 +const analyze = () => req({ + url: "ai/skin/analyze" +}) + +// 创建检测订单 +const skinOrder = () => req({ + url : "ai/skin/order", + method: "POST", +}) + +// 检测订单支付 +const skinPay = (order_id, data) => req({ + url : "ai/pay/" + order_id + "/wechat", + data: data, +}) + +// 皮肤检测 +const skinEnter = (data, path) => { + return upload({ + url : "ai/skin/analyze", + key : "image", + path : path, + data : data, + method : "POST", + }) +} + +export default ({ + analyze, + skinOrder, + skinPay, + skinEnter +}) \ No newline at end of file diff --git a/api/interfaces/mall.js b/api/interfaces/mall.js new file mode 100644 index 0000000..6cbd866 --- /dev/null +++ b/api/interfaces/mall.js @@ -0,0 +1,65 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +// 产品首页 +const mallIndex = () => req({ + url: "mall" +}) + +// 产品列表 +const mallList = data => req({ + url: "mall/goods", + data: data +}) + +// 产品详情 +const mallSee = (goods) => req({ + url: "mall/goods/" + goods +}) + +// 产品下单 +const mallPlace = data => req({ + url: "mall/buy/goods", + data: data +}) + +// 产品下单提交 +const mallAffirm = data => req({ + url: "mall/buy/goods", + data: data, + method: "POST", +}) + +// 产品支付 +const mallPay = (order_no, data) => req({ + url: "mall/pay/" + order_no + "/wechat", + data: data +}) + +// 绑定邀请码 +const levelBind = (data) => req({ + url: "user/bind", + data: data, + method: "POST", +}) + +// 我的兑换券 +const mycoupon = (data) => req({ + url: "coupons", + data: data +}) + +export default ({ + mallIndex, + mallList, + mallSee, + mallPlace, + mallAffirm, + mallPay, + levelBind, + mycoupon +}) \ No newline at end of file diff --git a/api/interfaces/order.js b/api/interfaces/order.js new file mode 100644 index 0000000..521f957 --- /dev/null +++ b/api/interfaces/order.js @@ -0,0 +1,50 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +// 订单首页 +const list = data => req({ + url : "mall/orders", + data: data +}) + +// 订单详情 +const goodsDet = (order_no) => req({ + url : "mall/orders/" + order_no +}) + +// 订单取消 +const goodsCancel = (order_no) => req({ + url : "mall/orders/" + order_no + "/cancel", + method: "PUT" +}) + +// 订单删除 +const goodsDel = (order_no) => req({ + url : "mall/orders/" + order_no, + method: "DELETE" +}) + +// 订单签收 +const goodsSign = (order_no) => req({ + url : "mall/orders/" + order_no + "/sign", + method: "PUT" +}) + +// 快递100-免费 +const kuaiDi = (data) => req({ + url : "mall/orders/express", + data: data +}) + +export default ({ + list, + goodsDet, + goodsCancel, + goodsDel, + goodsSign, + kuaiDi +}) \ No newline at end of file diff --git a/api/interfaces/site.js b/api/interfaces/site.js new file mode 100644 index 0000000..1ceb9d8 --- /dev/null +++ b/api/interfaces/site.js @@ -0,0 +1,58 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +// 收获地址(列表) +const siteList = () => req({ + url: "mall/addresses" +}) + +// 省市区-获取 +const create = data => req({ + url: "mall/addresses/create", + data: data +}) + +// 新增地址 +const siteAdd = data => req({ + url: "mall/addresses", + data: data, + method: 'POST' +}) + +// 地址详细 +const siteSee = (address) => req({ + url: "mall/addresses/" + address +}) + +// 编辑地址 +const siteEdit = (address, data) => req({ + url: "mall/addresses/" + address, + data: data, + method: 'PUT' +}) + +// 删除地址 +const siteDel = (address) => req({ + url: "mall/addresses/" + address, + method: 'DELETE' +}) + +// 设置默认地址 +const siteDefault = (address) => req({ + url: "mall/addresses/" + address + "/default", + method: 'POST' +}) + +export default ({ + siteList, + create, + siteAdd, + siteSee, + siteEdit, + siteDel, + siteDefault +}) \ No newline at end of file diff --git a/api/interfaces/user.js b/api/interfaces/user.js new file mode 100644 index 0000000..07e26ec --- /dev/null +++ b/api/interfaces/user.js @@ -0,0 +1,49 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +// 用户中心 +const userIndex = () => req({ + url: "user" +}) + +// 用户设置 +const userSetup = () => req({ + url: "user/setting" +}) + +//修改用户信息 +const setting = (key, data) => req({ + url: "user/setting/" + key, + method: "PUT", + data: data +}) + +// 我的推广码 +const invitesCode = data => req({ + url: "user/invite", + data: data +}) + +// 小程序码 +const miniShare = data => req({ + url: "user/mini_share", + data: data +}) + +// 帮助分类 +const helpsNav = () => req({ + url: "cms/categories/helps" +}) + +export default ({ + userIndex, + userSetup, + setting, + invitesCode, + miniShare, + helpsNav +}) \ No newline at end of file diff --git a/api/request.js b/api/request.js new file mode 100644 index 0000000..ed4ce8f --- /dev/null +++ b/api/request.js @@ -0,0 +1,139 @@ +/* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import {errInfo} from './err' +import {updToken} from './updateToken' + +// 请求方式配置 +// https://api.shui.shuiganying.com/api //正式地址 +// https://shuitest.shuiganying.com/api //测试地址 +// wx6bd4fcc040bfa025 正式appid +// wx3056ec23196eaf02 测试appid +const api = "https://api.shui.shuiganying.com/api/" // 正式环境 +// const api = "https://shuitest.shuiganying.com/api/" // 测试环境 +const header = { + "Accept" : "application/json" +} +let isToken = true + +/** + * 请求 + * @property {Object} req + */ + +const req = (obj, noToken) => { + // 检查是否无需要token + if(noToken != undefined){ + isToken = noToken + } + + // 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", + "channel" : "client", + "Authorization" : wx.getStorageSync("token") || "" + } + if(!isToken){ + obj.header.Authorization = '' + } + 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 + }) + } + reject(res) + errInfo(res.data) + } + }, + fail: err => { + wx.showToast({ + title : err.errMsg, + icon : "none" + }) + reject(err) + }, + complete(){ + if(!isToken) isToken = true + } + }) + }) +} + + +/** + * 上传 + * @property {Object} upload + */ + +const upload = (obj) => { + // header + header.Authorization = wx.getStorageSync("token") || "" + // 处理上传信息 + return new Promise((resolve, reject) => { + wx.showLoading({ + title: "上传中..", + mask: true + }) + wx.uploadFile({ + url : api + obj.url, + header : header, + name : obj.key || "", + filePath: obj.path || "", + formData: obj.data || {}, + success : res=>{ + wx.hideLoading(); + // 处理返回值 + let jsonData = JSON.parse(res.data) + // 更新token + if (res.header.Authorization) updToken(res.header.Authorization) + // 处理信息 + if (jsonData.status_code == 200) { + resolve(jsonData.data) + } else { + if (jsonData.status_code == 401) { + reject({ + login: false + }) + } + errInfo(jsonData) + } + }, + fail : err=>{ + wx.showToast({ + title : err.errMsg, + icon : "none" + }) + reject(err) + } + }) + }) +} + +module.exports = { + req, + upload +} \ No newline at end of file diff --git a/api/updateToken.js b/api/updateToken.js new file mode 100644 index 0000000..7853539 --- /dev/null +++ b/api/updateToken.js @@ -0,0 +1,21 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +/** + * 更新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..240f862 --- /dev/null +++ b/app.js @@ -0,0 +1,57 @@ +/* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +import api from "api/index" +App({ + onLaunch() { + // 检查用户登录状态 + const token = wx.getStorageSync("token") + if(token){ + this.globalData.isUser = true + } + + // 检查系统更新 + const updateManager = wx.getUpdateManager() + updateManager.onUpdateReady(function () { + wx.showModal({ + title : '更新提示', + content : '新版本已经准备好,是否重启应用?', + cancelColor: '#666', + confirmColor: '#e50d01', + success : res=> { + if (res.confirm) { + updateManager.applyUpdate() + } + } + }) + }) + updateManager.onUpdateFailed(function(){ + wx.showModal({ + title : '更新提示', + content : '版本更新下载失败,请检查您的网络稍后重试', + showCancel: false, + confirmColor: '#e50d01' + }) + }) + + // 获取系统信息 + wx.getSystemInfo({ + success: res=>{ + this.globalData = { + barHeight: res.statusBarHeight + } + } + }) + + // 挂载api + wx.$api = api + }, + globalData: { + isUser : false, + userInfo : null, + barHeight: '', + inviteText: '' // 邀请好友临时存储 + } +}) \ No newline at end of file diff --git a/app.json b/app.json new file mode 100644 index 0000000..b041034 --- /dev/null +++ b/app.json @@ -0,0 +1,73 @@ +{ + "pages": [ + "pages/index/index", + "pages/mall/index", + "pages/report/index", + "pages/user/index", + "pages/site/index", + "pages/order/index", + "pages/user/code/code", + "pages/user/setup/setup", + "pages/user/about/about", + "pages/user/help/help", + "pages/login/index", + "pages/site/add/add", + "pages/site/edit/edit", + "pages/health/index", + "pages/health/article/article", + "pages/order/details/details", + "pages/mall/details/details", + "pages/mall/confirm/confirm", + "pages/mall/coupon/coupon", + "pages/pay/index", + "pages/report/detail/detail", + "pages/report/share/share", + "pages/index/assess/assess", + "pages/health/collect/collect", + "pages/health/praise/praise", + "pages/mall/list/list", + "pages/login/personal/personal", + "pages/login/agreement/agreement", + "pages/mall/webView/webView", + "pages/order/logistic/logistic" + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "水感应", + "navigationBarTextStyle": "black" + }, + "tabBar": { + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "/static/tabBarIcon/tabBar_00.png", + "selectedIconPath": "/static/tabBarIcon/tabBar_selected_00.png" + }, + { + "pagePath": "pages/mall/index", + "text": "产品", + "iconPath": "/static/tabBarIcon/tabBar_01.png", + "selectedIconPath": "/static/tabBarIcon/tabBar_selected_01.png" + }, + { + "pagePath": "pages/report/index", + "text": "报告", + "iconPath": "/static/tabBarIcon/tabBar_02.png", + "selectedIconPath": "/static/tabBarIcon/tabBar_selected_02.png" + }, + { + "pagePath": "pages/user/index", + "text": "我的", + "iconPath": "/static/tabBarIcon/tabBar_03.png", + "selectedIconPath": "/static/tabBarIcon/tabBar_selected_03.png" + } + ], + "color": "#999999", + "selectedColor": "#3b7cff", + "borderStyle": "white" + }, + "style": "v2", + "sitemapLocation": "sitemap.json" +} \ No newline at end of file diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..d97b6a0 --- /dev/null +++ b/app.wxss @@ -0,0 +1,70 @@ +page { + font-size: 30rpx; +} + +/* +* 文字截取 +*/ + +.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; +} + +/* + * 上拉加载 + */ +.pagesLoding{ + width: 100%; + text-align: center; + color: gray; + line-height: 90rpx; + font-size: 28rpx; +} + +.pagesLoding-icon{ + width: 32rpx; + height: 32rpx; + vertical-align: middle; + margin-right: 10rpx; + margin-bottom: 6rpx; +} + +.pages-hint { + width: 100%; + text-align: center; + color: #747788; + font-size: 28rpx; + background: white; +} + +.pages-hint image { + width: 220rpx; + height: 220rpx; +} + +/* +* 水平居中 +*/ + +.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; +} \ No newline at end of file diff --git a/pages/health/article/article.js b/pages/health/article/article.js new file mode 100644 index 0000000..8f73e16 --- /dev/null +++ b/pages/health/article/article.js @@ -0,0 +1,140 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ +Page({ + + /** + * 页面的初始数据 + */ + data: { + articleId : '', //文章id + indexShow : '', //内容 + mallContent : '', //简介 + favoritesSee : '', //收藏状态 + favoritesNumber : '', //收藏数量 + subscribesSee : '', //点赞状态 + subscribesNumber: '', //点赞数量 + isFixedTop : 0, + barHeight : getApp().globalData.barHeight, // 状态栏高度 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + articleId : options.id + }) + + if(options.invite != undefined) { + getApp().globalData.inviteText = options.invite + } + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取详情数据 + this.indexInfo(); + }, + + /** + * 详情数据 + */ + indexInfo () { + wx.$api.health.healthSee(this.data.articleId).then(res => { + this.setData({ + indexShow : res.data, + favoritesSee : res.data.isFavorite, + subscribesSee : res.data.isSubscribed, + favoritesNumber : res.data.favorites, + subscribesNumber: res.data.subscribes, + mallContent : res.data.content.replace(/\ {}) + }, + + // 操作按钮 + toolTap(e) { + let newName = e.currentTarget.dataset.name + if(wx.getStorageSync("token") != ''){ + // 收藏 + if(newName == 'favorites') { + wx.$api.health.favorite(this.data.articleId).then(res => { + this.setData({ + favoritesSee : res.data.favorite, + favoritesNumber: res.data.count + }) + wx.showToast({ + title:'操作成功', + icon:'none' + }) + }).catch(err => {}) + return + } + + // 点赞 + wx.$api.health.subscribe(this.data.articleId).then(res => { + this.setData({ + subscribesSee : res.data.subscribed, + subscribesNumber: res.data.count + }) + wx.showToast({ + title:'操作成功', + icon:'none' + }) + }).catch(err => {}) + }else{ + // 去登录 + wx.navigateTo({ + url: "/pages/login/index" + }) + } + }, + + /** + * 微信分享 + */ + onShareAppMessage(){ + return { + title : this.data.indexShow.title, + imageUrl: this.data.indexShow.cover, + path : "/pages/health/article/article?id=" + this.data.articleId + '&invite=' + wx.getStorageSync("invite") + } + }, + + /** + * 返回上一页 + */ + returnGo() { + wx.navigateBack({ + delta: 1, + fail: () => { + wx.switchTab({ + url: '/pages/index/index?invite=' + getApp().globalData.inviteText + }) + } + }) + }, + + /** + * 回到首页 + */ + returnHome() { + wx.switchTab({ + url: '/pages/index/index?invite=' + getApp().globalData.inviteText + }) + }, + + /** + * 监听页面滑动事件 + */ + onPageScroll(e) { + this.setData({ + isFixedTop: parseInt(e.scrollTop) + }); + }, +}) \ No newline at end of file diff --git a/pages/health/article/article.json b/pages/health/article/article.json new file mode 100644 index 0000000..f0f1934 --- /dev/null +++ b/pages/health/article/article.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom", + "navigationBarTextStyle": "white" +} \ No newline at end of file diff --git a/pages/health/article/article.wxml b/pages/health/article/article.wxml new file mode 100644 index 0000000..a5c9427 --- /dev/null +++ b/pages/health/article/article.wxml @@ -0,0 +1,40 @@ + + + + + + + + + + 水感应 | {{indexShow.title}} + + + {{indexShow.created_at}} + 浏览 {{indexShow.clicks}} + + + + + + + + + + + + + + + + {{favoritesNumber}} + + + + {{subscribesNumber}} + + + \ No newline at end of file diff --git a/pages/health/article/article.wxss b/pages/health/article/article.wxss new file mode 100644 index 0000000..ebbe4df --- /dev/null +++ b/pages/health/article/article.wxss @@ -0,0 +1,102 @@ +page { + background-color: #ffffff; +} + +.articleImg { + width: 100%; + display: inline-block; +} + +.articleCont { + padding: 30rpx; + box-sizing: border-box; + border-bottom: 160rpx transparent solid; +} + +.articleName { + font-size: 36rpx; + margin-top: 20rpx; +} + +.articleName text { + text-transform: uppercase; +} + +.articleTool { + color: #666666; + font-size: 26rpx; + margin-top: 15rpx; +} + +.articleTool text { + padding-right: 30rpx; + font-weight: 200; +} + +.articleBanner { + text-align: center; + margin: 60rpx 0; +} + +.articleBanner image { + width: 100%; +} + +.tool { + position: fixed; + width: 100%; + height: 90rpx; + line-height: 90rpx; + left: 0; + bottom: 60rpx; + z-index: 99; + padding: 0 30rpx; + box-sizing: border-box; +} + +.toolCont { + background-color: #ffffff; + display: flex; + box-shadow: 0 0 10rpx rgba(0, 0, 0, .1); + border-radius: 80rpx; +} + +.toolCont-label { + flex: 3; + text-align: center; + color: #999; + font-size: 30rpx; + background-color: transparent; + padding: 0; + margin: 0; + line-height: 100rpx; + font-weight: 200; +} + +.toolCont-label-icon { + width: 36rpx; + height: 36rpx; + margin-right: 10rpx; + vertical-align: -4rpx; +} + +.navigation{ + position: fixed; + top: 0; + left: 0; + z-index: 99; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: transparent; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} \ No newline at end of file diff --git a/pages/health/collect/collect.js b/pages/health/collect/collect.js new file mode 100644 index 0000000..b891a85 --- /dev/null +++ b/pages/health/collect/collect.js @@ -0,0 +1,71 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ +Page({ + + /** + * 页面的初始数据 + */ + data: { + categories : [], // 分类 + articlesArr : [], // 列表 + page : {}, // 分页信息 + lodingStats : false, // 加载状态 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取列表 + this.articlesInfo(); + }, + + // 列表 + articlesInfo(page){ + wx.$api.health.myFavorite({ + page : page || 1 + }).then(res => { + let listArr = this.data.articlesArr, + newData = [] + if(page == 1 || page == undefined) listArr = [] + newData = listArr.concat(res.data.favorites.data) + this.setData({ + articlesArr : newData, + page : res.data.favorites.page, + lodingStats : false + }) + wx.stopPullDownRefresh() + }).catch(err => {}) + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取列表 + this.articlesInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取列表 + this.articlesInfo(pageNumber); + } + } +}) \ No newline at end of file diff --git a/pages/health/collect/collect.json b/pages/health/collect/collect.json new file mode 100644 index 0000000..32e11d1 --- /dev/null +++ b/pages/health/collect/collect.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "我的收藏" +} \ No newline at end of file diff --git a/pages/health/collect/collect.wxml b/pages/health/collect/collect.wxml new file mode 100644 index 0000000..3909479 --- /dev/null +++ b/pages/health/collect/collect.wxml @@ -0,0 +1,24 @@ + + + + + + + 水感应 | {{item.favoriteable.title}} + {{item.favoriteable.description}} + + + + + 加载中... + + + 没有更多了~ + + + + + + 暂无数据 + + \ No newline at end of file diff --git a/pages/health/collect/collect.wxss b/pages/health/collect/collect.wxss new file mode 100644 index 0000000..28b618e --- /dev/null +++ b/pages/health/collect/collect.wxss @@ -0,0 +1,62 @@ +page { + padding: 0 30rpx; + box-sizing: border-box; + background-color: #f6f6f6; +} + +/* 健康知识 */ +.article { + box-sizing: border-box; +} + +.wiki { + margin-top: 60rpx; +} + +.wiki-label { + background-color: #fff; + margin-bottom: 70rpx; + position: relative; + height: 200rpx; + box-shadow: 0 4rpx 30rpx 2rpx rgba(0, 0, 0, .05); + border-radius: 10rpx; +} + +.wiki-label:last-child { + margin-bottom: 0; +} + +.wiki-label-img { + width: 200rpx; + height: 200rpx; + position: absolute; + top: -30rpx; + left: 30rpx; + border-radius: 10rpx; +} + +.wiki-label-cont { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding: 30rpx 25rpx 0 270rpx; + box-sizing: border-box; +} + +.wiki-label-name { + font-size: 32rpx; + color: #3b7cff; +} + +.wiki-label-name text { + text-transform: uppercase; +} + +.wiki-label-text { + color: #999999; + font-size: 28rpx; + margin-top: 20rpx; + line-height: 40rpx; + font-weight: 200; +} \ No newline at end of file diff --git a/pages/health/index.js b/pages/health/index.js new file mode 100644 index 0000000..01b7f33 --- /dev/null +++ b/pages/health/index.js @@ -0,0 +1,87 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ +Page({ + data: { + categoriesArr : [], // 健康分类 + categoryId : '', // 分类id + listsArr : [], // 列表 + page : {}, // 分页信息 + lodingStats : false,// 加载状态 + }, + + onLoad(options) { + // 获取健康分类 + this.categoriesInfo(); + }, + + /** + * 健康分类 + */ + categoriesInfo() { + wx.$api.health.healthNav().then(res => { + this.setData({ + categoriesArr : res.data, + categoryId : res.data[0].category_id + }) + // 获取健康列表 + this.healthInfo(); + }).catch(err => {}) + }, + + /** + * 分类选择 + */ + tabsTap(e) { + this.setData({ + categoryId: e.currentTarget.dataset.id + }) + // 获取健康分类 + this.healthInfo(); + }, + + /** + * 健康列表 + */ + healthInfo(page) { + wx.$api.health.healthList({ + category_id: this.data.categoryId, + page : page || 1 + }).then(res => { + let listArr = this.data.listsArr, + newData = [] + if(page == 1 || page == undefined) listArr = [] + newData = listArr.concat(res.data.data) + this.setData({ + listsArr : newData, + page : res.data.page, + lodingStats : false + }) + wx.stopPullDownRefresh() + }).catch(err => {}) + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取健康列表 + this.healthInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取健康列表 + this.healthInfo(pageNumber); + } + } +}) diff --git a/pages/health/index.json b/pages/health/index.json new file mode 100644 index 0000000..52e6a1d --- /dev/null +++ b/pages/health/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "健康知识" +} \ No newline at end of file diff --git a/pages/health/index.wxml b/pages/health/index.wxml new file mode 100644 index 0000000..d14550e --- /dev/null +++ b/pages/health/index.wxml @@ -0,0 +1,33 @@ + + + + + {{item.title}} + + + + + + + + + + + 水感应 | {{item.title}} + {{item.description}} + + + + + 加载中... + + + 没有更多了~ + + + + + + 暂无数据 + + \ No newline at end of file diff --git a/pages/health/index.wxss b/pages/health/index.wxss new file mode 100644 index 0000000..3ac68c4 --- /dev/null +++ b/pages/health/index.wxss @@ -0,0 +1,101 @@ +page { + background-color: #fafafa; +} + +/* 分类 */ +.tabs { + box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, .05); + background-color: #fff; +} + +.tabs-scroll { + line-height: 88rpx; + height: 110rpx; + white-space: nowrap; +} + +.tabs-scroll-name { + display: inline-block; + padding: 0 32rpx; + font-size: 30rpx; + position: relative; + color: rgb(85, 85, 85); +} + +.tabs-scroll-name::after { + content: ''; + position: absolute; + background-color: transparent; + left: 32%; + bottom: 0rpx; + width: 36%; + height: 8rpx; + border-radius: 60rpx; +} + +.tabs-scroll-name.active { + color: #3b7cff; + font-weight: 600; +} + +.tabs-scroll-name.active::after { + background-color: #3b7cff; +} + +/* 健康知识 */ +.article { + padding: 10rpx 30rpx; + box-sizing: border-box; +} + +.wiki { + margin-top: 60rpx; +} + +.wiki-label { + background-color: #fff; + margin-bottom: 70rpx; + position: relative; + height: 200rpx; + box-shadow: 0 4rpx 30rpx 2rpx rgba(0, 0, 0, .05); + border-radius: 10rpx; +} + +.wiki-label:last-child { + margin-bottom: 0; +} + +.wiki-label-img { + width: 200rpx; + height: 200rpx; + position: absolute; + top: -30rpx; + left: 30rpx; + border-radius: 10rpx; +} + +.wiki-label-cont { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding: 30rpx 25rpx 0 270rpx; + box-sizing: border-box; +} + +.wiki-label-name { + font-size: 32rpx; + color: #3b7cff; +} + +.wiki-label-name text { + text-transform: uppercase; +} + +.wiki-label-text { + color: #999999; + font-size: 28rpx; + margin-top: 20rpx; + line-height: 40rpx; + font-weight: 200; +} \ No newline at end of file diff --git a/pages/health/praise/praise.js b/pages/health/praise/praise.js new file mode 100644 index 0000000..45002ac --- /dev/null +++ b/pages/health/praise/praise.js @@ -0,0 +1,71 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ +Page({ + + /** + * 页面的初始数据 + */ + data: { + categories : [], // 分类 + articlesArr : [], // 列表 + page : {}, // 分页信息 + lodingStats : false, // 加载状态 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取列表 + this.articlesInfo(); + }, + + // 列表 + articlesInfo(page){ + wx.$api.health.mySubscribe({ + page : page || 1 + }).then(res => { + let listArr = this.data.articlesArr, + newData = [] + if(page == 1 || page == undefined) listArr = [] + newData = listArr.concat(res.data.subscriptions.data) + this.setData({ + articlesArr : newData, + page : res.data.subscriptions.page, + lodingStats : false + }) + wx.stopPullDownRefresh() + }).catch(err => {}) + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取列表 + this.articlesInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取列表 + this.articlesInfo(pageNumber); + } + } +}) \ No newline at end of file diff --git a/pages/health/praise/praise.json b/pages/health/praise/praise.json new file mode 100644 index 0000000..08c673f --- /dev/null +++ b/pages/health/praise/praise.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "我的点赞" +} \ No newline at end of file diff --git a/pages/health/praise/praise.wxml b/pages/health/praise/praise.wxml new file mode 100644 index 0000000..3da9bc4 --- /dev/null +++ b/pages/health/praise/praise.wxml @@ -0,0 +1,24 @@ + + + + + + + 水感应 | {{item.subscribable.title}} + {{item.subscribable.description}} + + + + + 加载中... + + + 没有更多了~ + + + + + + 暂无数据 + + \ No newline at end of file diff --git a/pages/health/praise/praise.wxss b/pages/health/praise/praise.wxss new file mode 100644 index 0000000..28b618e --- /dev/null +++ b/pages/health/praise/praise.wxss @@ -0,0 +1,62 @@ +page { + padding: 0 30rpx; + box-sizing: border-box; + background-color: #f6f6f6; +} + +/* 健康知识 */ +.article { + box-sizing: border-box; +} + +.wiki { + margin-top: 60rpx; +} + +.wiki-label { + background-color: #fff; + margin-bottom: 70rpx; + position: relative; + height: 200rpx; + box-shadow: 0 4rpx 30rpx 2rpx rgba(0, 0, 0, .05); + border-radius: 10rpx; +} + +.wiki-label:last-child { + margin-bottom: 0; +} + +.wiki-label-img { + width: 200rpx; + height: 200rpx; + position: absolute; + top: -30rpx; + left: 30rpx; + border-radius: 10rpx; +} + +.wiki-label-cont { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding: 30rpx 25rpx 0 270rpx; + box-sizing: border-box; +} + +.wiki-label-name { + font-size: 32rpx; + color: #3b7cff; +} + +.wiki-label-name text { + text-transform: uppercase; +} + +.wiki-label-text { + color: #999999; + font-size: 28rpx; + margin-top: 20rpx; + line-height: 40rpx; + font-weight: 200; +} \ No newline at end of file diff --git a/pages/index-老版/assess/assess.js b/pages/index-老版/assess/assess.js new file mode 100644 index 0000000..069e0c4 --- /dev/null +++ b/pages/index-老版/assess/assess.js @@ -0,0 +1,193 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + barHeight : getApp().globalData.barHeight, // 状态栏高度 + openId : '', + nameValue : '', // 姓名 + nameStatus: false, // 姓名填写弹框 + Analyze : '', // 是否交钱 + disabled : false, // 支付按钮 + payStatus : false, // 支付弹框 + payPrice : '', // 支付金额 + }, + + onLoad(options) { + this.setData({ + openId: options.code + }) + }, + + onShow() { + // 判断是否可检测 + this.ifAnalyze(); + }, + + /** + * 是否可检测 + */ + ifAnalyze() { + wx.$api.index.analyze().then(res => { + this.setData({ + Analyze : res.data.analyze, + payPrice : res.data.price + }) + if(!res.data.is_update) { + this.setData({ + nameStatus: true + }) + } + }).catch(err => {}) + }, + + /* + 姓名截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value.substr(0,5) + }) + }, + + /* + 提交信息 + */ + issueForm() { + wx.showLoading({ + title: '信息提交中...', + mask : true + }) + let data = { + name : this.data.nameValue + } + wx.$api.auth.userAdd(data).then(() => { + wx.hideLoading() + this.setData({ + nameStatus: false + }) + }).catch(err => {}) + }, + + /** + * 开始皮肤检测 + */ + goAnalyze() { + if(this.data.Analyze) { + this.uploadPhoto() + return + } + this.setData({ + payStatus: true + }) + }, + + /** + * 上传图片信息 + */ + uploadPhoto() { + wx.chooseMedia({ + count : 1, + sourceType: ['camera'], + camera : 'front', + success : path => { + // 获取皮肤检测接口 + wx.cropImage({ + src: path.tempFiles[0].tempFilePath, // 图片路径 + cropScale: '3:4', // 裁剪比例 + success: res=> { + // 获取皮肤检测接口 + this.checkEnter(res.tempFilePath); + }, + complete: err => {} + }) + } + }) + }, + + /** + * 皮肤检测接口 + */ + checkEnter(img) { + wx.$api.index.skinEnter({}, img).then(res => { + wx.redirectTo({ + url: "/pages/report/detail/detail?image_id=" + res.image_id + }) + }) + }, + + /** + * 关闭支付弹窗 + */ + cancelAnalyze() { + this.setData({ + payStatus: false + }) + }, + + /** + * 创建订单 + */ + payFound() { + wx.$api.index.skinOrder().then(res => { + this.setData({ + disabled : true + }) + this.payBtn(res.data.order_id) + }).catch(err => {}) + }, + + /** + * 确认支付1元 + */ + payBtn(orderid) { + wx.showLoading({ + title: '支付中...', + mask : true + }) + wx.$api.index.skinPay(orderid,{type: 'miniapp', openid: this.data.openId}).then(res=>{ + wx.hideLoading() + let payInfo = JSON.parse(res.data.wechat) + 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' + }) + } + this.setData({ + payStatus: false + }) + this.uploadPhoto() + }, + fail : err=>{ + wx.showToast({ + title: '支付失败', + icon : 'error' + }) + this.setData({ + disabled : false, + payStatus: false + }) + } + }) + }).catch(err => {}); + }, + + /** + * 返回上一页 + */ + returnGo() { + wx.navigateBack({ + delta: 1 + }) + }, +}) diff --git a/pages/index-老版/assess/assess.json b/pages/index-老版/assess/assess.json new file mode 100644 index 0000000..7af8b0a --- /dev/null +++ b/pages/index-老版/assess/assess.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/index-老版/assess/assess.wxml b/pages/index-老版/assess/assess.wxml new file mode 100644 index 0000000..9611929 --- /dev/null +++ b/pages/index-老版/assess/assess.wxml @@ -0,0 +1,75 @@ + + + + + + + + + + + + 拍照注意事项 + + + + 1 + 露出全脸 + + + + 2 + 保持素颜 + + + + 3 + 灯光柔和 + + + + 4 + 合适角度距离 + + + + + + + {{Analyze ? '首次免费,开始测肤' : '支付' + payPrice + '元,进行测肤'}} > + + + + + + + + + 请填写真实姓名 + + + + 取消 + 确定 + + + + + + + + + + + AI测肤火爆进行中 + 原价¥10/次,现价¥1/次即可享受并赠送水感应一年VIP权限! + + + ¥1.00 + + 立即支付 + 立即支付 + 取消 + + + \ No newline at end of file diff --git a/pages/index-老版/assess/assess.wxss b/pages/index-老版/assess/assess.wxss new file mode 100644 index 0000000..79f9777 --- /dev/null +++ b/pages/index-老版/assess/assess.wxss @@ -0,0 +1,344 @@ +page { + background-color: #f7faff; +} + + + +/* 返回 */ +.navigation{ + position: fixed; + top: 0; + left: 0; + z-index: 999; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: #ffffff; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + +/* 顶部背景 */ +.top { + width: 100%; + position: relative; + height: 100vh; + overflow: hidden; +} + +.top-back { + position: absolute; + height: 100%; + left: 0; + top: 0; + width: 100%; + z-index: 1; +} + +/* 内容 */ +.seeCont { + position: absolute; + top: 10%; + z-index: 100; + width: 100%; + padding: 80rpx 30rpx; + box-sizing: border-box; +} + +.seeCont-title { + text-align: center; + font-size: 42rpx; +} + +.seeCont-item { + margin-top: 60rpx; + position: relative; + width: 100%; + height: 700rpx; +} + +.seeCont-item::after { + border-radius: 15rpx; + position: absolute; + content: ''; + background-color: #ffffff; + width: 100%; + height: 100%; + opacity: .6; + left: 0; + top: 0; +} + +.seeCont-text { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 10; + padding: 60rpx; + box-sizing: border-box; +} + +.seeCont-laebl { + display: flex; + line-height: 84rpx; + padding: 30rpx 0; + box-sizing: border-box; + position: relative; +} + +.seeCont-laebl-number { + color: #3d7eff; + font-weight: 600; + font-size: 60rpx; + position: relative; + padding-right: 20rpx; + font-style:italic; +} + +.seeCont-laebl-number::after { + position: absolute; + content: ''; + right: 0; + top: 40rpx; + background-color: #3d7eff; + width: 4rpx; + height: 50rpx; + transform:skewX(-30deg); +} + +.seeCont-laebl-name { + font-size: 34rpx; + padding-left: 60rpx; +} + +.seeCont-laebl-img { + width: 84rpx; + height: 84rpx; + position: absolute; + right: 0; + top: 30rpx; +} + +.seeBtn { + text-align: center; + width: 100%; +} + +.seeBtn-btn { + background-color: #3d7eff; + display: inline-block; + color: #ffffff; + border-radius: 90rpx; + margin-top: 60rpx; + line-height: 90rpx; + padding: 0 80rpx; +} + + +/* 名字弹出 */ +.namePop { + position: fixed; + background-color: rgba(0, 0, 0, .5); + left: 0; + top: 0; + height: 100vh; + width: 100vw; + z-index: 100000; + display: none; +} + +.namePop.active { + display: block; +} + +.nameCont { + -webkit-box-orient: vertical; + -webkit-box-pack: center; + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 100000; + padding: 0 15%; + box-sizing: border-box; + display: none; +} + +.nameCont.active { + display: -webkit-box; +} + +.nameCont-white { + background-color: #ffffff; + border-radius: 15rpx; + overflow: hidden; +} + +.nameCont-top { + padding: 30rpx; + box-sizing: border-box; +} + +.nameCont-title { + font-size: 34rpx; + margin-bottom: 30rpx; +} + +.nameCont-input { + background-color: #f3f3f3; + height: 90rpx; + line-height: 90rpx; + border-radius: 10rpx; + padding: 0 25rpx; + box-sizing: border-box; +} + +.nameCont-btn { + line-height: 100rpx; + background-color: #f3f3f3; + display: flex; + margin-top: 30rpx; + border-top: 2rpx solid #dfdfdf; +} + +.nameCont-btn-go { + text-align: center; + flex: 2; +} + +.nameCont-btn-go:last-child { + position: relative; + color: #ff9951; +} + +.nameCont-btn-go:last-child::after { + position: absolute; + content: ''; + left: 0; + top: 0; + width: 2rpx; + height: 100%; + background-color: #dfdfdf; +} + +/* 支付弹出 */ +.payEject { + position: fixed; + width: 100vw; + height: 100vh; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, .6); + z-index: 1000; + display: none; +} + +.payEject.active{ + display: block; +} + +.payPop { + width: 84%; + position: fixed; + left: 8%; + top: 30%; + z-index: 10001; + height: 600rpx; + display: none; +} + +.payPop.active{ + display: block; +} + +.payPop::after { + border-radius: 15rpx 200rpx 15rpx 15rpx; + position: absolute; + content: ''; + background-color: #ffffff; + width: 100%; + height: 100%; + opacity: .6; + left: 0; + top: 0; +} + +.payPop-cont { + width: calc(100% - 40rpx); + height: calc(100% - 40rpx); + position: absolute; + left: 20rpx; + top: 20rpx; + background-color: #ffffff; + border-radius: 15rpx 200rpx 15rpx 15rpx; + z-index: 10002; + padding: 30rpx; + box-sizing: border-box; +} + +.payPop-title { + width: 100%; + padding-right: 150rpx; + box-sizing: border-box; +} + +.payPop-title-name { + font-size: 46rpx; + color: #3d7eff; + margin-bottom: 20rpx; + font-weight: 600; +} + +.payPop-title-text { + color: #666666; + line-height: 44rpx; + font-size: 26rpx; +} + +.payPop-cont-img { + position: absolute; + top: -30rpx; + right: -20rpx; + width: 42%; +} + +.payPop-price { + text-align: center; + font-size: 70rpx; + padding: 40rpx 0; +} + +.payPop-btn { + text-align: center; + width: 100%; +} + +.payPop-btn-go { + background-image: linear-gradient(to right, #4181fe, #689aff); + display: inline-block; + color: #ffffff; + border-radius: 90rpx; + line-height: 90rpx; + padding: 0 100rpx; +} + +.payPop-btn-go.active { + background-image: linear-gradient(to right, #cacaca, #bdbdbd); +} + +.payPop-btn-cancel { + color:#3d7eff; + text-align: center; + padding-top: 30rpx; +} \ No newline at end of file diff --git a/pages/index-老版/index.js b/pages/index-老版/index.js new file mode 100644 index 0000000..7e372f5 --- /dev/null +++ b/pages/index-老版/index.js @@ -0,0 +1,67 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + payCode : '', // code获取openid + openId : '', // openid + disabled : false, // 支付按钮 + payStatus : false, // 支付弹框 + catchtouchmove: false + }, + + onLoad(options) { + if(options.invite != undefined) { + getApp().globalData.inviteText = options.invite + } + wx.login({ + success: res => { + this.setData({ + payCode: res.code + }) + // 获取openid + this.openInfo() + } + }) + }, + + /** + * openid + */ + openInfo() { + wx.$api.auth.codeOpenid({code: this.data.payCode}).then(res => { + this.setData({ + openId: res.data + }) + }).catch(err => {}) + }, + + /** + * 处理未登录时的转跳 + */ + assessGo(){ + if(wx.getStorageSync("token") != ''){ + wx.navigateTo({ + url: '/pages/index/assess/assess?code=' + this.data.openId + }) + return + } + + // 去登录 + wx.navigateTo({ + url: "/pages/login/index?type=indexDemo" + }) + }, + + /** + * 微信分享 + */ + onShareAppMessage(){ + return { + title : '水感应', + path : "/pages/index/index?invite=" + wx.getStorageSync("invite") + } + }, +}) diff --git a/pages/index-老版/index.json b/pages/index-老版/index.json new file mode 100644 index 0000000..7af8b0a --- /dev/null +++ b/pages/index-老版/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/index-老版/index.wxml b/pages/index-老版/index.wxml new file mode 100644 index 0000000..bf230aa --- /dev/null +++ b/pages/index-老版/index.wxml @@ -0,0 +1,37 @@ + + + + + 开始评测 + + + + + + + + + + + + + 最新活动 + + + + + + + + + + + + + + + + + + + diff --git a/pages/index-老版/index.wxss b/pages/index-老版/index.wxss new file mode 100644 index 0000000..c099bd4 --- /dev/null +++ b/pages/index-老版/index.wxss @@ -0,0 +1,140 @@ +/* 第一屏幕 */ +.indexBack { + position: relative; + width: 100%; + height: 100vh; +} + +.indexBack-img { + position: absolute; + width: 100%; + height: 100%; +} + +.indexText { + position: absolute; + bottom: 20rpx; + left: 0; + text-align: center; + width: 100%; +} + +.indexText-name { + background-color: #3b7cff; + color: #fff; + display: inline-block; + border-radius: 50rpx; + height: 68rpx; + line-height: 68rpx; + padding: 0 50rpx; +} + +.indexText-arrow { + width: 74rpx; + height: 74rpx; + display: block; + margin: 15rpx auto 0; + animation: bounce-down 2s linear infinite; +} + +@keyframes bounce-down { + 25% { + transform: translateY(-4px); + } + + 50%, + 100% { + transform: translateY(0); + } + + 75% { + transform: translateY(4px); + } +} + +/* 步骤提示 */ +.indexTips { + width: 100%; + padding: 60rpx 50rpx; + box-sizing: border-box; +} + +.indexTips-img { + width: 100%; +} + +/* 活动轮播 */ +.indexShaky { + width: 100%; +} + +.indexShaky-back { + position: relative; + width: 100%; + left: 0; + top: 0; + height: 230rpx; + background-color: #b8d3e8; + border-radius: 0 0 50rpx 50rpx; + text-align: center; +} + +.indexShaky-title { + color: #1049a2; + position: relative; + font-size: 54rpx; + height: 100rpx; + padding-top: 30rpx; +} + +.indexShaky-title>text { + width: 100%; + text-align: center; + position: absolute; + left: 0; + bottom: 0; + z-index: 2; +} + +.indexShaky-title::after { + position: absolute; + content: ''; + left: calc(50% - 100rpx); + bottom: -2rpx; + background-image: linear-gradient(to left, #ffffff,#ffffff 50%, transparent); + width: 200rpx; + height: 18rpx; +} + +.indexShaky-swiper { + margin-top: -50rpx; + padding: 0 30rpx; + box-sizing: border-box; +} + +.indexShaky-cont { + position: relative; + border-radius: 20rpx; + padding-top: 50%; + overflow: hidden; +} + +.indexShaky-see, +.swiperCont-img { + border-radius: 20rpx; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* 步骤提示 */ +.indexSingle { + width: 100%; + margin-top: 80rpx; +} + +.indexSingle-img { + width: 100%; +} diff --git a/pages/index/assess/assess.js b/pages/index/assess/assess.js new file mode 100644 index 0000000..ca4d540 --- /dev/null +++ b/pages/index/assess/assess.js @@ -0,0 +1,235 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + barHeight : getApp().globalData.barHeight, // 状态栏高度 + openId : '', + nameValue : '', // 姓名 + testTitle : '', + nameStatus: false, // 姓名填写弹框 + Analyze : '', // 是否交钱 + disabled : false, // 支付按钮 + payStatus : false, // 支付弹框 + payPrice : '', // 支付金额 + }, + + onLoad(options) { + this.setData({ + openId: options.code + }) + if(options) { + wx.login({ + success: res => { + // 获取openid + this.openInfo(res.code) + } + }) + } + }, + + onShow() { + // 判断是否可检测 + this.ifAnalyze(); + }, + + + /** + * openid + */ + openInfo(code) { + wx.$api.auth.codeOpenid({code: code}).then(res => { + this.setData({ + openId: res.data + }) + }).catch(err => {}) + }, + + /** + * 是否可检测 + */ + ifAnalyze() { + wx.$api.index.analyze().then(res => { + if(res.data.is_first) { + this.setData({ + testTitle: '首次免费,开始测肤' + }) + } else if (res.data.is_first == false && res.data.analyze == false) { + this.setData({ + testTitle: '支付' + res.data.price + '元,进行测肤' + }) + } else if (res.data.is_first == false && res.data.analyze == true) { + this.setData({ + testTitle: '您已付费,进行检测' + }) + } + + this.setData({ + Analyze : res.data + }) + if(!res.data.is_update) { + this.setData({ + nameStatus: true + }) + } + }).catch(err => {}) + }, + + /* + 姓名截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value.substr(0,5) + }) + }, + + /* + 提交信息 + */ + issueForm() { + wx.showLoading({ + title: '信息提交中...', + mask : true + }) + let data = { + name : this.data.nameValue + } + wx.$api.auth.userAdd(data).then(() => { + wx.hideLoading() + this.setData({ + nameStatus: false + }) + }).catch(err => {}) + }, + + /** + * 开始皮肤检测 + */ + goAnalyze() { + if(this.data.Analyze.is_first == false && this.data.Analyze.analyze == false) { + this.setData({ + payStatus: true + }) + } else { + this.uploadPhoto() + } + }, + + /** + * 上传图片信息 + */ + uploadPhoto() { + wx.chooseMedia({ + count : 1, + sourceType: ['camera'], + camera : 'front', + success : path => { + // 获取皮肤检测接口 + wx.cropImage({ + src: path.tempFiles[0].tempFilePath, // 图片路径 + cropScale: '3:4', // 裁剪比例 + success: res=> { + // 获取皮肤检测接口 + this.checkEnter(res.tempFilePath); + }, + complete: err => {} + }) + } + }) + }, + + /** + * 皮肤检测接口 + */ + checkEnter(img) { + wx.$api.index.skinEnter({}, img).then(res => { + wx.redirectTo({ + url: "/pages/report/detail/detail?image_id=" + res.image_id + }) + }) + }, + + /** + * 关闭支付弹窗 + */ + cancelAnalyze() { + this.setData({ + payStatus: false + }) + }, + + /** + * 创建订单 + */ + payFound() { + wx.$api.index.skinOrder().then(res => { + this.setData({ + disabled : true + }) + this.payBtn(res.data.order_id) + }).catch(err => {}) + }, + + /** + * 确认支付1元 + */ + payBtn(orderid) { + wx.showLoading({ + title: '支付中...', + mask : true + }) + wx.$api.index.skinPay(orderid,{type: 'miniapp', openid: this.data.openId}).then(res=>{ + wx.hideLoading() + let payInfo = JSON.parse(res.data.wechat) + 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' + }) + } + this.setData({ + payStatus: false + }) + this.setData({ + Analyze: false + }) + this.uploadPhoto() + }, + fail : err=>{ + wx.showToast({ + title: '支付失败', + icon : 'error' + }) + this.setData({ + disabled : false, + payStatus: false + }) + } + }) + }).catch(err => { + this.setData({ + disabled : false, + payStatus: false + }) + }); + }, + + /** + * 返回上一页 + */ + returnGo() { + wx.navigateBack({ + delta: 1 + }) + }, +}) diff --git a/pages/index/assess/assess.json b/pages/index/assess/assess.json new file mode 100644 index 0000000..7af8b0a --- /dev/null +++ b/pages/index/assess/assess.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/index/assess/assess.wxml b/pages/index/assess/assess.wxml new file mode 100644 index 0000000..e0e5200 --- /dev/null +++ b/pages/index/assess/assess.wxml @@ -0,0 +1,75 @@ + + + + + + + + + + + + 拍照注意事项 + + + + 1 + 露出全脸 + + + + 2 + 保持素颜 + + + + 3 + 光线柔和 + + + + 4 + 合适角度距离 + + + + + + + {{testTitle}} + + + + + + + + + 请填写真实姓名 + + + + 取消 + 确定 + + + + + + + + + + + AI测肤火爆进行中 + 原价¥10/次,现价¥1/次即可享受并赠送水感应一年VIP权限! + + + ¥1.00 + + 立即支付 + 立即支付 + 取消 + + + \ No newline at end of file diff --git a/pages/index/assess/assess.wxss b/pages/index/assess/assess.wxss new file mode 100644 index 0000000..79f9777 --- /dev/null +++ b/pages/index/assess/assess.wxss @@ -0,0 +1,344 @@ +page { + background-color: #f7faff; +} + + + +/* 返回 */ +.navigation{ + position: fixed; + top: 0; + left: 0; + z-index: 999; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: #ffffff; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + +/* 顶部背景 */ +.top { + width: 100%; + position: relative; + height: 100vh; + overflow: hidden; +} + +.top-back { + position: absolute; + height: 100%; + left: 0; + top: 0; + width: 100%; + z-index: 1; +} + +/* 内容 */ +.seeCont { + position: absolute; + top: 10%; + z-index: 100; + width: 100%; + padding: 80rpx 30rpx; + box-sizing: border-box; +} + +.seeCont-title { + text-align: center; + font-size: 42rpx; +} + +.seeCont-item { + margin-top: 60rpx; + position: relative; + width: 100%; + height: 700rpx; +} + +.seeCont-item::after { + border-radius: 15rpx; + position: absolute; + content: ''; + background-color: #ffffff; + width: 100%; + height: 100%; + opacity: .6; + left: 0; + top: 0; +} + +.seeCont-text { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 10; + padding: 60rpx; + box-sizing: border-box; +} + +.seeCont-laebl { + display: flex; + line-height: 84rpx; + padding: 30rpx 0; + box-sizing: border-box; + position: relative; +} + +.seeCont-laebl-number { + color: #3d7eff; + font-weight: 600; + font-size: 60rpx; + position: relative; + padding-right: 20rpx; + font-style:italic; +} + +.seeCont-laebl-number::after { + position: absolute; + content: ''; + right: 0; + top: 40rpx; + background-color: #3d7eff; + width: 4rpx; + height: 50rpx; + transform:skewX(-30deg); +} + +.seeCont-laebl-name { + font-size: 34rpx; + padding-left: 60rpx; +} + +.seeCont-laebl-img { + width: 84rpx; + height: 84rpx; + position: absolute; + right: 0; + top: 30rpx; +} + +.seeBtn { + text-align: center; + width: 100%; +} + +.seeBtn-btn { + background-color: #3d7eff; + display: inline-block; + color: #ffffff; + border-radius: 90rpx; + margin-top: 60rpx; + line-height: 90rpx; + padding: 0 80rpx; +} + + +/* 名字弹出 */ +.namePop { + position: fixed; + background-color: rgba(0, 0, 0, .5); + left: 0; + top: 0; + height: 100vh; + width: 100vw; + z-index: 100000; + display: none; +} + +.namePop.active { + display: block; +} + +.nameCont { + -webkit-box-orient: vertical; + -webkit-box-pack: center; + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 100000; + padding: 0 15%; + box-sizing: border-box; + display: none; +} + +.nameCont.active { + display: -webkit-box; +} + +.nameCont-white { + background-color: #ffffff; + border-radius: 15rpx; + overflow: hidden; +} + +.nameCont-top { + padding: 30rpx; + box-sizing: border-box; +} + +.nameCont-title { + font-size: 34rpx; + margin-bottom: 30rpx; +} + +.nameCont-input { + background-color: #f3f3f3; + height: 90rpx; + line-height: 90rpx; + border-radius: 10rpx; + padding: 0 25rpx; + box-sizing: border-box; +} + +.nameCont-btn { + line-height: 100rpx; + background-color: #f3f3f3; + display: flex; + margin-top: 30rpx; + border-top: 2rpx solid #dfdfdf; +} + +.nameCont-btn-go { + text-align: center; + flex: 2; +} + +.nameCont-btn-go:last-child { + position: relative; + color: #ff9951; +} + +.nameCont-btn-go:last-child::after { + position: absolute; + content: ''; + left: 0; + top: 0; + width: 2rpx; + height: 100%; + background-color: #dfdfdf; +} + +/* 支付弹出 */ +.payEject { + position: fixed; + width: 100vw; + height: 100vh; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, .6); + z-index: 1000; + display: none; +} + +.payEject.active{ + display: block; +} + +.payPop { + width: 84%; + position: fixed; + left: 8%; + top: 30%; + z-index: 10001; + height: 600rpx; + display: none; +} + +.payPop.active{ + display: block; +} + +.payPop::after { + border-radius: 15rpx 200rpx 15rpx 15rpx; + position: absolute; + content: ''; + background-color: #ffffff; + width: 100%; + height: 100%; + opacity: .6; + left: 0; + top: 0; +} + +.payPop-cont { + width: calc(100% - 40rpx); + height: calc(100% - 40rpx); + position: absolute; + left: 20rpx; + top: 20rpx; + background-color: #ffffff; + border-radius: 15rpx 200rpx 15rpx 15rpx; + z-index: 10002; + padding: 30rpx; + box-sizing: border-box; +} + +.payPop-title { + width: 100%; + padding-right: 150rpx; + box-sizing: border-box; +} + +.payPop-title-name { + font-size: 46rpx; + color: #3d7eff; + margin-bottom: 20rpx; + font-weight: 600; +} + +.payPop-title-text { + color: #666666; + line-height: 44rpx; + font-size: 26rpx; +} + +.payPop-cont-img { + position: absolute; + top: -30rpx; + right: -20rpx; + width: 42%; +} + +.payPop-price { + text-align: center; + font-size: 70rpx; + padding: 40rpx 0; +} + +.payPop-btn { + text-align: center; + width: 100%; +} + +.payPop-btn-go { + background-image: linear-gradient(to right, #4181fe, #689aff); + display: inline-block; + color: #ffffff; + border-radius: 90rpx; + line-height: 90rpx; + padding: 0 100rpx; +} + +.payPop-btn-go.active { + background-image: linear-gradient(to right, #cacaca, #bdbdbd); +} + +.payPop-btn-cancel { + color:#3d7eff; + text-align: center; + padding-top: 30rpx; +} \ No newline at end of file diff --git a/pages/index/index.js b/pages/index/index.js new file mode 100644 index 0000000..35db3a7 --- /dev/null +++ b/pages/index/index.js @@ -0,0 +1,116 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + payCode : '', // code获取openid + openId : '', // openid + userLogin : false, // 是否登录 + testTitle : '', // 检测文字 + disabled : false, // 支付按钮 + payStatus : false, // 支付弹框 + catchtouchmove: false + }, + + onLoad(options) { + if(options.invite != undefined) { + getApp().globalData.inviteText = options.invite + } + }, + + onShow() { + wx.login({ + success: res => { + this.setData({ + payCode: res.code + }) + // 获取openid + this.openInfo() + } + }) + + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + this.setData({ + userLogin: true + }) + // 是否可检测 + this.ifAnalyze(); + return + } + + this.setData({ + userLogin: false + }) + }, + + /** + * openid + */ + openInfo() { + wx.$api.auth.codeOpenid({code: this.data.payCode}).then(res => { + this.setData({ + openId: res.data + }) + }).catch(err => {}) + }, + + /** + * 是否可检测 + */ + ifAnalyze() { + wx.$api.index.analyze().then(res => { + if(res.data.is_first) { + this.setData({ + testTitle: '首次免费,开始测肤' + }) + } else if (res.data.is_first == false && res.data.analyze == false) { + this.setData({ + testTitle: '支付' + res.data.price + '元,进行测肤' + }) + } else if (res.data.is_first == false && res.data.analyze == true) { + this.setData({ + testTitle: '您已付费,进行检测' + }) + } + + this.setData({ + Analyze : res.data + }) + if(!res.data.is_update) { + this.setData({ + nameStatus: true + }) + } + }).catch(err => {}) + }, + + /** + * 处理未登录时的转跳 + */ + assessGo(){ + if(wx.getStorageSync("token") != ''){ + wx.navigateTo({ + url: '/pages/index/assess/assess?code=' + }) + return + } + + // 去登录 + wx.navigateTo({ + url: "/pages/login/index?type=indexDemo" + }) + }, + + /** + * 微信分享 + */ + onShareAppMessage(){ + return { + title : '水感应', + path : "/pages/index/index?invite=" + wx.getStorageSync("invite") + } + }, +}) diff --git a/pages/index/index.json b/pages/index/index.json new file mode 100644 index 0000000..7af8b0a --- /dev/null +++ b/pages/index/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml new file mode 100644 index 0000000..662ed45 --- /dev/null +++ b/pages/index/index.wxml @@ -0,0 +1,30 @@ + + + + + + 下滑了解详情 + + + + + + + + + 检测 + + + + + + + + + + + + + + {{userLogin ? testTitle : '立即开启皮肤检测'}} + diff --git a/pages/index/index.wxss b/pages/index/index.wxss new file mode 100644 index 0000000..016bb47 --- /dev/null +++ b/pages/index/index.wxss @@ -0,0 +1,125 @@ +/* 漂浮窗 */ +.wander { + position: fixed; + right: 0; + top: 26%; + background-color: #ffffff; + border-radius: 60rpx 0 0 60rpx; + height: 150rpx; + width: 120rpx; +} + +.wander::after { + position: absolute; + left: -15rpx; + top: -15rpx; + background-color: rgba(255, 255, 255, .3); + content: ''; + width: calc(100% + 30rpx); + height: calc(100% + 30rpx); + z-index: 0; + border-radius: 60rpx 0 0 60rpx; +} + +.wander-cont { + padding: 25rpx 25rpx 25rpx 35rpx; + box-sizing: border-box; + position: absolute; + z-index: 2; + width: 100%; + height: 100%; + left: 0; + top: 0; + text-align: center; +} + +.wander-icon { + width: 54rpx; +} + +.wander-name { + color: #12428f; + padding-top: 5rpx; + font-weight: 300; + font-size: 26rpx; +} + +/* 第一屏幕 */ +.indexBack { + position: relative; + width: 100%; + height: 100vh; +} + +.indexBack-img { + position: absolute; + width: 100%; + height: 100%; +} + +.indexText { + position: absolute; + bottom: 30rpx; + left: 0; + text-align: center; + width: 100%; +} + +.indexText-name { + color: #fff; + display: inline-block; + border-radius: 50rpx; + text-shadow: 2rpx 2rpx 10rpx rgba(0, 0, 0, .3); + font-size: 28rpx; +} + +.indexText-arrow { + width: 36rpx; + height: 36rpx; + display: block; + margin: 15rpx auto 0; + animation: bounce-down 2s linear infinite; +} + +@keyframes bounce-down { + 25% { + transform: translateY(-4px); + } + + 50%, + 100% { + transform: translateY(0); + } + + 75% { + transform: translateY(4px); + } +} + + +/* 步骤提示 */ +.indexSingle { + width: 100%; +} + +.indexSingle-img { + width: 100%; + display: block; +} + + +/* 按钮 */ +.testBtn { + text-align: center; +} + +.testBtn-go { + margin: 50rpx 0 100rpx; + background-image: linear-gradient(to right, #3d7dfe, #6b9fff); + border: 14rpx solid #bdd3ff; + display: inline-block; + color: #fff; + line-height: 90rpx; + width: 75%; + border-radius: 110rpx; +} \ No newline at end of file diff --git a/pages/login/agreement/agreement.js b/pages/login/agreement/agreement.js new file mode 100644 index 0000000..3abb33b --- /dev/null +++ b/pages/login/agreement/agreement.js @@ -0,0 +1,42 @@ +/* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + content: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + if(options.type == 'secret') { + wx.setNavigationBarTitle({ + title: '水感应 隐私政策' + }) + } else { + wx.setNavigationBarTitle({ + title: '水感应 服务协议' + }) + } + + // 获取用户协议 + wx.$api.auth.registeragree(options.type).then(res => { + this.setData({ + content: res.data.content + }) + }).catch(err => {}) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() {}, +}) \ No newline at end of file diff --git a/pages/login/agreement/agreement.json b/pages/login/agreement/agreement.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/pages/login/agreement/agreement.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/login/agreement/agreement.wxml b/pages/login/agreement/agreement.wxml new file mode 100644 index 0000000..7fd32b1 --- /dev/null +++ b/pages/login/agreement/agreement.wxml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pages/login/agreement/agreement.wxss b/pages/login/agreement/agreement.wxss new file mode 100644 index 0000000..7c3f35b --- /dev/null +++ b/pages/login/agreement/agreement.wxss @@ -0,0 +1,5 @@ +.agreement-content{ + padding: 30rpx; + box-sizing: border-box; + font-size: 32rpx; +} \ No newline at end of file diff --git a/pages/login/index.js b/pages/login/index.js new file mode 100644 index 0000000..9f7d09f --- /dev/null +++ b/pages/login/index.js @@ -0,0 +1,140 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + typeLogin : '', // 登录来源 + loading : false, // 加载 + loginCode : '', // 微信登录code + checked : false, //勾选协议 + }, + + onLoad(options) { + this.setData({ + typeLogin : options.type + }) + }, + + onShow() { + // 获取code + this.gainCode(); + }, + + /** + * 隐私协议 + */ + empowerTap() { + wx.showToast({ + title: '请勾选用户隐私和服务协议', + icon: "none" + }) + }, + + /** + * 微信授权手机号码 + */ + userPhone(e){ + // 获取code + this.gainCode(); + if(e.detail.errMsg == "getPhoneNumber:ok"){ + this.setData({ + loading: true + }) + let enData = e.detail.encryptedData, + iv = e.detail.iv + // 检查用户登录Code是否过期 + wx.checkSession({ + success: ()=>{ + this.userLogin(iv,enData) + }, + fail: err=>{ + this.setData({ + loading: false + }) + // 登录过期重新获取code + wx.login({ + success: res=>{ + this.setData({ + loginCode: res.code + }) + // 登录 + this.userLogin(iv,enData) + } + }) + } + }) + }else{ + wx.showToast({ + title: '拒绝了登录授权', + icon : 'none' + }) + } + }, + + /** + * 用户登录 + */ + userLogin(iv,enData){ + wx.$api.auth.login({ + code : this.data.loginCode, + encryptedData : enData, + iv : iv, + invite : getApp().globalData.inviteText || '' + }).then(res=>{ + // 存储登录信息 + wx.setStorage({ + key : 'token', + data : res.data.token_type + ' ' + res.data.access_token, + success: () =>{ + // 存储邀请码 + wx.$api.user.userIndex().then(res => { + wx.setStorage({ + key : 'invite', + data : res.data.invite + }) + if(this.data.typeLogin == "indexDemo") { + wx.redirectTo({ + url: '/pages/index/assess/assess' + }) + return + } + // 回到上一页 + wx.navigateBack() + }).catch(err => {}) + } + }) + }).catch(err=>{}) + }, + + /** + * 获取code + */ + gainCode() { + wx.login({ + success: res => { + this.setData({ + loginCode : res.code + }) + } + }) + }, + + // 勾选协议 + radioChange() { + this.setData({ + checked: !this.data.checked + }) + }, + + // 免责声明 + seeSm(){ + wx.showModal({ + title: '免责声明', + content: '本品不含任何除原料外的添加物,如使用中有任何问题,请遵医嘱。', + showCancel:false, + confirmText:'知道了' + }) + } +}) diff --git a/pages/login/index.json b/pages/login/index.json new file mode 100644 index 0000000..51796f5 --- /dev/null +++ b/pages/login/index.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#5283ea", + "navigationBarTextStyle": "white", + "navigationBarTitleText": "授权登录" +} \ No newline at end of file diff --git a/pages/login/index.wxml b/pages/login/index.wxml new file mode 100644 index 0000000..44137d6 --- /dev/null +++ b/pages/login/index.wxml @@ -0,0 +1,31 @@ + + + + + 欢迎使用 + 水感应平台 + + + + + + 授权登录 + 回到首页 + + + + + + + + 我已阅读并同意《隐私政策》《服务协议》《免责声明》 + + + + + + + + \ No newline at end of file diff --git a/pages/login/index.wxss b/pages/login/index.wxss new file mode 100644 index 0000000..80eff17 --- /dev/null +++ b/pages/login/index.wxss @@ -0,0 +1,119 @@ +page { + background-color: #f4f4f6; +} + +.loginTop { + background-color: #5283ea; + width: 100%; + height: 200rpx; + border-radius: 0 0 80rpx 80rpx; +} + +.loginCont { + padding: 0 40rpx; + box-sizing: border-box; + position: absolute; + top: 40rpx; + width: 100%; + z-index: 99; +} + +.loginCont-back { + background-color: #ffffff; + border-radius: 20rpx; + padding: 40rpx 40rpx 20rpx; + box-sizing: border-box; +} + +.loginCont-title-name { + color: #525252; +} + +.loginCont-title-text { + font-size: 40rpx; + margin-top: 15rpx; + position: relative; + display: inline-block; + padding-bottom: 20rpx; +} + +.loginCont-title-text::after { + position: absolute; + content: ''; + background-color: #5283ea; + width: 100%; + height: 8rpx; + left: 0; + bottom: 0; + border-radius: 80rpx; +} + +.loginCont-see-img { + width: 100%; + margin: 80rpx 0 60rpx; +} + +.loginCont-see-btn { + width: 100%; +} + +.loginCont-see-go { + height: 98rpx; + line-height: 98rpx !important; + text-align: center; + border-radius: 90rpx; + margin-bottom: 40rpx; + font-size: 32rpx !important; + border: 2rpx solid #5283ea; + width: 100% !important; +} + +.loginCont-see-blue { + background-color: #5283ea; + color: #ffffff; + padding: 0 !important; + font-weight: normal; + border: none; + height: 104rpx !important; +} + +.loginCont-see-blue[disabled] { + border-color: transparent; +} + +.loginCont-see-white { + color: #5283ea; +} + +.logo { + position: absolute; + z-index: 1; + right: -120rpx; + bottom: 18%; +} + + +/* 协议 */ +.agreement { + font-size: 26rpx; + color: #9d9d9d; + margin: 20rpx 0; + display: flex; +} + +.radioGroup { + transform: scale(.6); + width: 55rpx; + text-align: left; +} + +.agreement-text { + width: calc(100% - 55rpx); + line-height: 48rpx; +} + +.agreement-text navigator, +.agreement-text view { + color: #3b7cff; + display: inline-block; +} \ No newline at end of file diff --git a/pages/login/personal/personal.js b/pages/login/personal/personal.js new file mode 100644 index 0000000..7920947 --- /dev/null +++ b/pages/login/personal/personal.js @@ -0,0 +1,77 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + loading : false, // 加载 + nameValue : '', + sexArray: [ + { + id: 0, + name: '男' + }, + { + id: 1, + name: '女' + }, + ], + sexId: '', + birthday: '请选择出生年月日' + }, + + onLoad(options) { + }, + + onShow() {}, + + /* + 性别选择 + */ + radioChange (e) { + const sex = this.data.sexArray + for (let i = 0, len = sex.length; i < len; ++i) { + sex[i].checked = sex[i].id == e.detail.value + } + this.setData({ + sexArray: sex, + sexId : e.detail.value + }) + }, + + /* + 出生年月日 + */ + bindDateChange(e) { + this.setData({ + birthday: e.detail.value + }) + }, + + /* + 姓名截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value.substr(0,5) + }) + }, + + /* + 提交信息 + */ + issueForm() { + let data = { + name : this.data.nameValue, + sex : this.data.sexId, + birthday : this.data.birthday + } + wx.$api.auth.userAdd(data).then(res => { + this.setData({ + disabled: true + }) + wx.navigateBack() + }).catch(err => {}) + } +}) diff --git a/pages/login/personal/personal.json b/pages/login/personal/personal.json new file mode 100644 index 0000000..2abdc05 --- /dev/null +++ b/pages/login/personal/personal.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "基本信息" +} \ No newline at end of file diff --git a/pages/login/personal/personal.wxml b/pages/login/personal/personal.wxml new file mode 100644 index 0000000..b0db3d3 --- /dev/null +++ b/pages/login/personal/personal.wxml @@ -0,0 +1,46 @@ + + + + + 请填写以下个人信息 + 填写以下信息,填写后的信息不可修改 + +
+ + + 姓名 + + + + 性别 + + + + + {{item.name}} + + + + + 出生年月日 + + {{birthday}} + + + + + + + +
+
+
+ + + \ No newline at end of file diff --git a/pages/login/personal/personal.wxss b/pages/login/personal/personal.wxss new file mode 100644 index 0000000..9cc9d82 --- /dev/null +++ b/pages/login/personal/personal.wxss @@ -0,0 +1,147 @@ +page { + background-color: #f4f4f6; +} + +.loginTop { + background-color: #5283ea; + width: 100%; + height: 200rpx; + border-radius: 0 0 80rpx 80rpx; +} + +.loginCont { + padding: 0 40rpx; + box-sizing: border-box; + position: absolute; + top: 40rpx; + width: 100%; + z-index: 99; +} + +.loginCont-back { + background-color: #ffffff; + border-radius: 20rpx; + padding: 40rpx 40rpx 20rpx; + box-sizing: border-box; +} + +.loginCont-see-img { + width: 100%; + margin: 80rpx 0 60rpx; +} + +.loginCont-see-btn { + width: 100%; +} + +.loginCont-see-go { + height: 98rpx; + line-height: 98rpx !important; + text-align: center; + border-radius: 90rpx; + margin-bottom: 40rpx; + font-size: 32rpx !important; + border: 2rpx solid #5283ea; + width: 100% !important; +} + +.loginCont-see-blue { + background-color: #5283ea; + color: #ffffff; + height: 102rpx !important; + padding: 0 !important; + font-weight: normal; +} + +.loginCont-see-blue[disabled] { + border-color: transparent; +} + +.loginCont-see-white { + color: #5283ea; +} + +.logo { + position: absolute; + z-index: 1; + right: -120rpx; + bottom: 18%; +} + +.personal-title-text { + font-size: 36rpx; + font-weight: 600; +} + +.personal-title-name { + font-size: 28rpx; + color: #ff9951; + line-height: 54rpx; +} + +.personal-see { + display: block; +} + +.item { + margin-top: 40rpx; + border-bottom: 2rpx solid #ededed; +} + +.entry { + height: 44rpx; + line-height: 44rpx; + display: block; + padding: 30rpx 0; + position: relative; + color: #999999; +} + +.entry image { + width: 44rpx; + height: 44rpx; + position: absolute; + right: 0; + top: calc(50% - 22rpx); +} + +.sexSelect { + display: flex; + padding: 30rpx 0; + height: 44rpx; + line-height: 44rpx; + color: #999999; +} + +.sexSelect radio { + transform: scale(.7); +} + +.radiobox { + display: flex; + margin-right: 50rpx; +} + +/* 按钮 */ +.userdata-btn { + width: 100%; + margin: 80rpx 0 20rpx; +} + +.issue-btn { + background: #3b7cff; + text-align: center; + color: white; + height: 90rpx; + line-height: 90rpx !important; + font-weight: normal; + width: 100% !important; + margin: 0; + padding: 0; + border-radius: 10rpx; +} + +.issue-btn[disabled] { + background: #709fff !important; + color: #fff !important; +} \ No newline at end of file diff --git a/pages/mall/confirm/confirm.js b/pages/mall/confirm/confirm.js new file mode 100644 index 0000000..7414695 --- /dev/null +++ b/pages/mall/confirm/confirm.js @@ -0,0 +1,220 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + goods_id : '', // 店铺id + goods_sku : '', // 产品id + goods_qty : '', // 产品数量 + address : '', // 地址 + addressId : '', // 地址id + goodskData : '', // 数据 + amount : '', // 总金额 + freight : '', // 运费 + weight : '', // 重量 + disabled : true,//按钮 + paySuccess : false, // 兑换成功显示 + maxcoupon : '', //拥有兑换券数量 + coupon_qty : 1, //兑换券数量 + checked : false//兑换券 + }, + + onLoad(options) { + this.setData({ + goods_id : options.goodsid, + goods_sku : options.skuid, + goods_qty : options.qty + }) + }, + + onShow() { + // 获取下单信息 + this.confirmInfo() + }, + + /** + * 产品下单信息 + */ + confirmInfo (){ + wx.$api.mall.mallPlace({ + goods_sku_id: this.data.goods_sku, + address_id: this.data.addressId, + qty: this.data.goods_qty + }).then(res => { + this.setData({ + address : res.data.address, + addressId : res.data.address.address_id, + goodskData: res.data.detail, + amount : res.data.amount, + freight : res.data.freight, + weight : res.data.weight, + maxcoupon : res.data.couponCount + }) + + // 计算总价格 + this.totalPrice() + }).catch(err => { }) + }, + + /** + * 产品数量加减 + */ + goodsNumber(e){ + let num = this.data.goods_qty, + val = e.currentTarget.dataset.type + if (val == 'plus'){ + num ++; + }else{ + if (num > 1){ + num --; + if(num < this.data.coupon_qty) { + this.setData({ + coupon_qty: num + }) + } + }else{ + wx.showToast({ + title : '商品数量不能小于1', + icon : 'none' + }) + } + this.setData({ + goods_qty: num + }) + } + this.setData({ + goods_qty: num + }) + + // 计算总价格 + this.totalPrice() + }, + + /** + * 是否使用兑换券 + */ + checkedTap() { + this.setData({ + checked: !this.data.checked + }) + + // 计算总价格 + this.totalPrice() + }, + + /** + * 兑换券数量加减 + */ + couponNumber(e){ + let minVal = Math.min(this.data.goods_qty, this.data.maxcoupon) + let num = this.data.coupon_qty, + val = e.currentTarget.dataset.type + if (val == 'plus'){ + if(num >= minVal){ + this.setData({ + coupon_qty: minVal + }) + wx.showToast({ + title: '兑换券数量超出产品数量或兑换券不足', + icon : 'none' + }) + return + } + num ++; + + }else{ + if (num > 1){ + num --; + }else{ + wx.showToast({ + title : '兑换券数量不能小于1', + icon : 'none' + }) + } + this.setData({ + coupon_qty: num + }) + } + this.setData({ + coupon_qty: num + }) + + // 计算总价格 + this.totalPrice() + }, + + /** + * 计算总价格 + */ + totalPrice() { + let couponQty = this.data.coupon_qty + let goodNum = this.data.goods_qty + let goodPrice = this.data.goodskData[0].items[0].price + let freight = this.data.freight + let totalPrice = 0 + + totalPrice = this.data.checked ? + (goodNum - couponQty) * goodPrice : + goodNum * goodPrice + if(freight > 0) totalPrice += freight + + this.setData({ + amount: totalPrice + }) + }, + + /** + * 产品确认购买 + */ + buyTap() { + wx.showLoading({ + title: '加载中...', + }) + let that = this + let data = { + goods_sku_id: this.data.goods_sku, + qty : this.data.goods_qty, + address_id : this.data.addressId, + use_coupon : this.data.checked, + coupon_qty : this.data.coupon_qty + } + wx.$api.mall.mallAffirm(data).then(res => { + this.setData({ + disabled: false + }) + wx.hideLoading() + + if(res.data.can_pay) { + wx.redirectTo({ + url: '/pages/pay/index?order_no=' + res.data.order_no + '&total=' + res.data.total + }) + return + } + + wx.showToast({ + title: '支付成功', + icon: 'none', + duration: 2000, + //显示透明蒙层,防止触摸穿透 + mask:true, + success: function () { + that.setData({ + paySuccess: true + }) + setTimeout(()=>{ + wx.redirectTo({ + url: '/pages/order/index?state=paid' + }) + },3000) + } + }) + + }).catch(err => { + this.setData({ + disabled: true + }) + }) + } +}) diff --git a/pages/mall/confirm/confirm.json b/pages/mall/confirm/confirm.json new file mode 100644 index 0000000..b41059d --- /dev/null +++ b/pages/mall/confirm/confirm.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "订单确认" +} \ No newline at end of file diff --git a/pages/mall/confirm/confirm.wxml b/pages/mall/confirm/confirm.wxml new file mode 100644 index 0000000..4085e8d --- /dev/null +++ b/pages/mall/confirm/confirm.wxml @@ -0,0 +1,81 @@ + + + + + {{address.province.name}}{{address.city.name}} + {{address.full_address}} + + + {{address.name}}{{address.mobile}} + + + + + 新增收货地址 + + + + + + + + + + + {{items.title}} + + 规格 99mlx1 + + + 产品金额 ¥{{items.price}} + + + + + + + + 数量 + + - + + + + + + + 快递 + {{freight == 0 ? '免邮' : freight + '元'}} + + + + 兑换券 + 勾选使用 + + + 使用数量 + + - + + + + + + + + 金额 + ¥{{amount}} + + + + + + + {{amount}} + 实付金额 + + 立即支付 + 立即支付 + + + + + 疯狂加载中... + \ No newline at end of file diff --git a/pages/mall/confirm/confirm.wxss b/pages/mall/confirm/confirm.wxss new file mode 100644 index 0000000..7c98d82 --- /dev/null +++ b/pages/mall/confirm/confirm.wxss @@ -0,0 +1,315 @@ +page { + background-color: #f5f6f8; + padding: 30rpx; + box-sizing: border-box; +} + +/* 地址 */ +.address { + background-color: #FFFFFF; + border-radius: 15rpx; + overflow: hidden; + position: relative; +} + +.address-arrow { + position: absolute; + right: 15rpx; + top: 78rpx; + width: 50rpx; + height: 50rpx; +} + +.address-cont { + padding: 30rpx; + box-sizing: border-box; +} + +.address-top { + width: calc(100% - 80rpx); +} + +.address-area { + color: #585866; + font-size: 28rpx; +} + +.address-text { + font-weight: 600; + padding: 10px 0; +} + +.address-name text { + color: #585866; + padding-left: 30rpx; +} + +.address-img { + width: 100%; + display: block; +} + +.address-add { + width: 100%; + text-align: center; + padding: 30rpx 30rpx 0; + box-sizing: border-box; +} + +.address-go { + display: inline-block; + font-size: 28rpx; + line-height: 68rpx; + border-radius: 10rpx; + color: #df723a; + padding-bottom: 20rpx; +} + +/* 商品 */ + +.list-goods { + background-color: #FFFFFF; + margin: 30rpx 0; + display: flex; + padding: 30rpx; + border-radius: 15rpx; + box-sizing: border-box; +} + +.list-goods-img { + width: 184rpx; + height: 184rpx; + margin-right: 30rpx; + border-radius: 10rpx; +} + +.list-goods-cont { + width: calc(100% - 214rpx); +} + +.list-goods-name { + font-size: 32rpx; +} + +.list-goods-text { + line-height: 90rpx; + display: flex; + font-size: 28rpx; + color: #999999; +} + +.list-goods-text text { + flex: 1; +} + +.list-goods-parice { + text-align: right; + font-size: 26rpx; +} + +.list-goods-parice text { + font-size: 34rpx; +} + +/* 规格 */ +.label { + background-color: #FFFFFF; + border-radius: 15rpx; + overflow: hidden; + box-sizing: border-box; +} + +.label-item { + display: flex; + line-height: 100rpx; + color: #585866; + font-size: 30rpx; + padding: 0 30rpx; + box-sizing: border-box; + border-bottom: 2rpx solid rgb(243, 243, 243); +} + +.label-item:last-child { + border: none; +} + +.label-integral { + color: #3b7cff; + font-weight: 600; +} + +.label-name { + flex: 1; +} + +.coupons { + border-bottom: 2rpx solid rgb(243, 243, 243); + padding: 0 30rpx 30rpx; + box-sizing: border-box; +} + +.coupons-item { + display: flex; + line-height: 100rpx; + color: #585866; + font-size: 30rpx; +} + +.coupon-checked { + background-color: #fff3ea; + padding: 20rpx 30rpx; + box-sizing: border-box; + border-radius: 10rpx; + position: relative; +} + +.coupon-checked-name { + color: #ff9951; + font-size: 28rpx; + line-height: 42rpx; +} + +.coupon-checked-number { + position: absolute; + right: 0rpx; + top: 0rpx; + display: flex; + background-color:transparent; +} + +.coupon-checked-btn { + color: #db6815; + width: 80rpx; + text-align: center; + font-weight: 600; + font-size: 38rpx; + line-height: 78rpx; +} + +.coupon-checked-input { + width: 60rpx; + border: 2rpx solid #bd5e1b; + border-radius: 4rpx; + text-align: center; + color: #dd620a; + height: 36rpx; + min-height: 36rpx; + display: inline-block; + margin-top: 20rpx; + font-size: 26rpx; +} + +/*checkbox选中后样式 */ +.label-text-checkbox { + margin-right: -14rpx; + margin-left: 10rpx; +} + +.label-text-checkbox .wx-checkbox-input.wx-checkbox-input-checked { + background: #ff9951; + border-color: #ff9951; +} + +.label-text-checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + width: 30rpx; + height: 30rpx; + line-height: 28rpx; + text-align: center; + font-size: 30rpx; + color: #fff; + background: transparent; + transform: translate(-50%, -50%) scale(1); + -webkit-transform: translate(-50%, -50%) scale(1); +} + +.label-price { + text-align: right; + line-height: 90rpx; + font-size: 30rpx; + font-weight: 600; + padding: 0 30rpx 5rpx; + box-sizing: border-box; +} + +.label-price text { + font-size: 34rpx; + padding: 0 10rpx; +} + +.label-number { + display: flex; + margin-top: 25rpx; +} + +.number-btn { + background-color: #f1f1f1; + width: 48rpx; + height: 48rpx; + line-height: 46rpx; + text-align: center; +} + +.number-input { + width: 80rpx; + text-align: center; +} + +/* 底部 */ +.footer { + width: 100%; + height: 60px; + background-color: #272e4f; + position: fixed; + left: 0; + bottom: 0; + z-index: 9; + box-sizing: border-box; + display: flex; +} + +.number { + flex: 1; + line-height: 60px; + color: #ffffff; + display: flex; + padding: 0 30rpx; + box-sizing: border-box; +} + +.number text { + font-size: 28rpx; + padding-top: 5rpx; +} + +.number-price { + padding: 0 5rpx; + font-size: 40rpx; +} + +.number-vip { + margin-left: 20rpx; + color: #8d97a1; + font-size: 28rpx; +} + +.btn { + height: 100%; + background-color: #ff9951; + text-align: center; + color: #FFFFFF; + padding: 0 70rpx; + line-height: 60px; +} + +.btn.active { + background-color: #cacaca; +} + +.detailsBrief-back{ + width: 100%; +} + +.grey { + background-color: #f9f9f9; + z-index: 99999; +} \ No newline at end of file diff --git a/pages/mall/coupon/coupon.js b/pages/mall/coupon/coupon.js new file mode 100644 index 0000000..cca7826 --- /dev/null +++ b/pages/mall/coupon/coupon.js @@ -0,0 +1,92 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + couponType : 1, // 兑换券类型 + couponStatus: 1, // 兑换券状态 + couponArr : [], // 兑换券列表 + page : {}, // 分页信息 + lodingStats : false, // 加载状态 + }, + + onShow() { + // 获取我的兑换券 + this.couponInfo(); + }, + + /** + * 我的兑换券 + */ + couponInfo(page) { + wx.$api.mall.mycoupon({ + stock : this.data.couponType, + status: this.data.couponStatus, + page : page || 1 + }).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() + }).catch(err => { + this.setData({ + disabled: true + }) + }) + + }, + + /** + * 兑换券-类型 + */ + tabClick(e) { + this.setData({ + couponType: e.currentTarget.dataset.type + }) + // 获取我的兑换券 + this.couponInfo(); + }, + + /** + * 兑换券-状态 + */ + stateClick(e) { + this.setData({ + couponStatus: e.currentTarget.dataset.status + }) + // 获取我的兑换券 + this.couponInfo(); + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取我的兑换券 + this.couponInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + + // 获取我的兑换券 + this.couponInfo(pageNumber); + } + } +}) diff --git a/pages/mall/coupon/coupon.json b/pages/mall/coupon/coupon.json new file mode 100644 index 0000000..07e3a0c --- /dev/null +++ b/pages/mall/coupon/coupon.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "兑换券" +} \ No newline at end of file diff --git a/pages/mall/coupon/coupon.wxml b/pages/mall/coupon/coupon.wxml new file mode 100644 index 0000000..42c2fe1 --- /dev/null +++ b/pages/mall/coupon/coupon.wxml @@ -0,0 +1,52 @@ + + + + 1瓶 + + + 2瓶 + + + 3瓶 + + + + + 未使用 + + + 已使用 + + + 已过期 + + + + + + + + + {{item.stock}} + + {{item.number}}张 + 有效期至 {{item.actived_at}} + 去使用 + 已使用 + + + + + + 加载中... + + + 没有更多了~ + + + + + + 暂无数据 + + \ No newline at end of file diff --git a/pages/mall/coupon/coupon.wxss b/pages/mall/coupon/coupon.wxss new file mode 100644 index 0000000..eed2e67 --- /dev/null +++ b/pages/mall/coupon/coupon.wxss @@ -0,0 +1,182 @@ +page { + background-color: #f7f9fa; +} + +.orderFixed { + background-color: #f7f9fa; + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 9; + height: 220rpx; +} + +.orderTab { + height: 90rpx; + line-height: 90rpx; + background-color: white; + display: flex; +} + +.orderTab-item { + flex: 2; + text-align: center; + position: relative; + color: #000000; +} + +.orderTab-item::after { + position: absolute; + content: ''; + left: calc(50% - 25rpx); + bottom: 0; + width: 50rpx; + height: 8rpx; + background-color: #3b7cff; + display: none; + border-radius: 90rpx; +} + +.orderTab-item.active { + font-weight: 600; +} + +.orderTab-item.active::after { + display: block; +} + +.orderState { + display: flex; + padding: 40rpx 30rpx; + box-sizing: border-box; +} + +.orderState-item { + background-color: white; + line-height: 54rpx; + padding: 0 25rpx; + border-radius: 54rpx; + font-size: 28rpx; + margin-right: 40rpx; +} + +.orderState-item.active { + background-color: #3b7cff; + color: #ffffff; +} + +/* 列表 */ +.coupon { + padding: 230rpx 30rpx 0; + box-sizing: border-box; +} + +.coupon-item { + background-image: linear-gradient(to right, #fcefe5, #ffebdc); + border-radius: 20rpx; + padding: 30rpx 0; + box-sizing: border-box; + margin-bottom: 30rpx; + display: flex; + position: relative; +} + +.coupon-item::after { + position: absolute; + content: ''; + right: -18rpx; + top: calc(50% - 18rpx); + width: 36rpx; + height: 36rpx; + border-radius: 50%; + background-color: #f7f9fa; +} + +.coupon-item-name { + width: 150rpx; + text-align: center; + font-size: 36rpx; + color: #ff9951; + line-height: 110rpx; + position: relative; +} + +.coupon-item-name::after { + position: absolute; + content: ''; + right: 0; + top: 0; + width: 2rpx; + height: 100%; + border-radius: 50%; + background-color: #fdd4b6; +} + +.coupon-item-name text { + font-size: 60rpx; + font-weight: 600; +} + +.coupon-item-text { + width: calc(100% - 150rpx); + padding: 10rpx 0 0 40rpx; + box-sizing: border-box; + position: relative; +} + +.coupon-item-number { + color: #ff9951; + font-size: 38rpx; + margin-bottom: 10rpx; +} + +.coupon-item-time { + font-size: 28rpx; + color: #c06728; +} + +.coupon-item-go { + position: absolute; + right: 40rpx; + top: 30rpx; + background-color: #ff9951; + color: #ffffff; + font-size: 28rpx; + border-radius: 80rpx; + padding: 0 25rpx; + line-height: 58rpx; +} + +.coupon-item-img { + position: absolute; + right: 40rpx; + top: 15rpx; + width: 94rpx; +} + +.coupon-item-go.active { + background-color: #999999; +} + +.coupon-item.active { + background-image: linear-gradient(to right, #eeeeee, #eeeeee); + +} + +.coupon-item.active .coupon-item-go { + background-color: #c1c1c1; +} + +.coupon-item.active .coupon-item-name, +.coupon-item.active .coupon-item-number { + color: #999999; +} + +.coupon-item.active .coupon-item-time { + color: #7a7a7a; +} + +.coupon-item.active .coupon-item-name::after { + background-color: #dbdbdb; +} \ No newline at end of file diff --git a/pages/mall/details/details.js b/pages/mall/details/details.js new file mode 100644 index 0000000..949f078 --- /dev/null +++ b/pages/mall/details/details.js @@ -0,0 +1,314 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + isFixedTop : 0, + barHeight : getApp().globalData.barHeight, // 状态栏高度 + goodsId : '', // 产品id + mallData : '', // 产品信息 + mallContent: '', // 产品简介 + shareSee : false, // 分享弹出 + inviteText : '', // 自己的邀请码 + isParent : false, // 绑定邀请码 + nameValue : '', // 上级邀请码 + }, + + onLoad(options) { + if(options.invite != undefined) { + getApp().globalData.inviteText = options.invite + } + this.setData({ + goodsId: options.id + }) + + // 初始化画布 + wx.createSelectorQuery().select('#coverCanvas').fields({node: true, size: true}).exec(canvasNode => { + const canvas = canvasNode[0].node + canvas.width = 375 + canvas.height = 600 + this.setData({ + canvas + }) + }) + }, + + onShow() { + // 获取产品详情 + this.mallInfo(); + + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + // 小程序码 + this.ShareInfo(); + } + }, + + /** + * 产品详情 + */ + mallInfo (){ + wx.$api.mall.mallSee(this.data.goodsId).then(res => { + this.setData({ + mallData : res.data, + mallContent : res.data.content.replace(/\ { }) + }, + + /** + * 确认购买 + */ + buyTap() { + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + if(this.data.mallData.is_parent == true) { + wx.navigateTo({ + url: '/pages/mall/confirm/confirm?goodsid=' + this.data.mallData.goods_id + '&skuid=' + this.data.mallData.skus[0].sku_id + '&qty=1', + }) + return + } + + // 显示绑定邀请码弹窗 + this.setData({ + isParent: true + }) + + }else{ + // 去登录 + wx.navigateTo({ + url: "/pages/login/index" + }) + } + }, + + /** + * 小程序码 + */ + ShareInfo() { + wx.$api.user.miniShare({ + url: '/pages/index/index' + }).then(res => { + this.setData({ + inviteCode: res.data.qrcode + }) + }).catch(err => {}) + }, + + /** + * 分享弹出 + */ + shareTap() { + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + this.setData({ + shareSee: !this.data.shareSee + }) + }else{ + // 去登录 + wx.navigateTo({ + url: "/pages/login/index" + }) + } + }, + + /** + * 生成海报 + */ + onCanvas(){ + wx.showLoading({ + title: '生成图片中...', + mask : true + }) + const canvas = this.data.canvas + const ctx = canvas.getContext('2d') + const codeImgEl = canvas.createImage() + const backBackEl = canvas.createImage() + + codeImgEl.src = this.data.inviteCode //二维码 + backBackEl.src = this.data.mallData.cover //产品分享图片 + const codeImgLoding = new Promise((resolve, reason) => { + codeImgEl.onload = () => { + resolve() + } + }) + const backBackLoding = new Promise((resolve, reason) => { + backBackEl.onload = () => { + resolve() + } + }) + Promise.all([codeImgLoding, backBackLoding]).then(() => { + // 绘制[二维码-白色背景] + ctx.fillStyle = "#ffffff"; + ctx.fillRect(0, 0, 375, 540); + + ctx.drawImage(backBackEl, 0, 0, 375, 375) + + // 绘制[二维码] + ctx.drawImage(codeImgEl, 270, 440, 80, 80) + + // 产品名称 + ctx.font = "24px Arial"; //字体大小 + ctx.fillStyle = "#000000"; //字体颜色 + ctx.fillText(this.data.mallData.name, 25, 420); + + // 产品价格 + ctx.font = "bold 36px Arial"; //字体大小 + ctx.fillStyle = "#3b7cff"; //字体颜色 + ctx.fillText(this.data.mallData.price.price, 25, 480); + + // 海报文字提示 + ctx.font = "18px Arial"; //字体大小 + ctx.fillStyle = "#b3b3b3"; //字体颜色 + ctx.fillText('识别二维码进行查看', 25, 510); + + wx.hideLoading() + + wx.canvasToTempFilePath({ + canvas: this.data.canvas, + success : res => { + wx.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: saveRes => { + wx.showToast({ + title: '海报已保存至您的相册', + icon : 'none' + }) + this.setData({ + shareSee: false + }) + }, + fail: () => { + this.setData({ + shareSee: false + }) + wx.hideLoading() + wx.showModal({ + title: '提示', + content: '暂未授权小程序写入您的相册,无法存储海报', + confirmColor: '#e50d01', + confirmText: '去设置', + success: res => { + if (res.confirm) { + wx.openSetting() + } + } + }) + } + }) + }, + }) + }).catch(err => { + wx.showToast({ + title: '图片加载失败', + icon : 'none' + }) + }) + }, + + /* + 邀请码截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value + }) + }, + + /** + * 绑定邀请码 + */ + nameTrue() { + wx.$api.mall.levelBind({ + invite: this.data.nameValue + }).then(res => { + this.setData({ + isParent: false + }) + wx.navigateTo({ + url: '/pages/mall/confirm/confirm?goodsid=' + this.data.mallData.goods_id + '&skuid=' + this.data.mallData.skus[0].sku_id + '&qty=1', + }) + }).catch(err => {}) + }, + + /** + * 关闭绑定邀请码弹窗 + */ + nameCancel() { + this.setData({ + isParent: !this.data.isParent + }) + }, + + /** + * 删除邀请码 + */ + colseTap() { + this.setData({ + nameValue: '' + }) + }, + + /** + * 返回上一页 + */ + returnGo() { + wx.navigateBack({ + delta: 1, + fail: err => { + wx.switchTab({ + url: '/pages/index/index?invite=' + getApp().globalData.inviteText + }) + } + }) + }, + + /** + * 回到首页 + */ + returnHome() { + wx.switchTab({ + url: '/pages/index/index?invite=' + getApp().globalData.inviteText + }) + }, + + /** + * 监听页面滑动事件 + */ + onPageScroll(e) { + this.setData({ + isFixedTop: parseInt(e.scrollTop) + }); + }, + + /** + * 微信分享 + */ + onShareAppMessage(){ + this.setData({ + shareSee: false + }) + return { + title : this.data.mallData.name, + path : "/pages/mall/details/details?id=" + this.data.goodsId + '&invite=' + wx.getStorageSync("invite"), + imageUrl: this.data.mallData.cover + } + }, + + /** + * 放大轮播相册图片 + */ + opneBanner(e){ + let imgs = [], + index = e.currentTarget.dataset.index + for (let img of e.currentTarget.dataset.imgs){ + imgs.push(img) + } + wx.previewImage({ + urls : imgs, + current : imgs[index] + }) + } +}) diff --git a/pages/mall/details/details.json b/pages/mall/details/details.json new file mode 100644 index 0000000..7af8b0a --- /dev/null +++ b/pages/mall/details/details.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/mall/details/details.wxml b/pages/mall/details/details.wxml new file mode 100644 index 0000000..b9fba3e --- /dev/null +++ b/pages/mall/details/details.wxml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + VIP¥{{mallData.price.vip}} + 市场指导价{{mallData.price.price}} + + + + {{mallData.name}} + + + 分享 + + + + + + + + + {{mallData.is_vip ? '已成为' : '开通'}}VIP + {{mallData.is_vip ? 'AI测肤精准分析您皮肤问题' : '完成皮肤评测成为vip/年'}} + + + {{mallData.is_vip ? '再次评测' : '立即评测'}} + + + + + + + 参数 + + + + {{mallData.param.weight}}ml + 净含量 + + + {{mallData.param.product_type}} + 产品类型 + + + + + + + 快递 + + + 免邮 + + + + + + + + + + + + + + {{mallData.is_vip ? mallData.price.vip : mallData.price.price}} + {{mallData.is_vip ? 'VIP会员价' : '市场指导价'}} + + 确认购买 + + + + + + + + {{mallData.name}} + + + {{mallData.price.price}} + + + 识别二维码进行查看 + + + + + + + + + + + + + + + 保存二维码 + + + 取消 + + + + + + + + + + + 您的邀请人? + + + + + + + 暂不绑定 + 立即绑定 + + + \ No newline at end of file diff --git a/pages/mall/details/details.wxss b/pages/mall/details/details.wxss new file mode 100644 index 0000000..7f527f1 --- /dev/null +++ b/pages/mall/details/details.wxss @@ -0,0 +1,545 @@ +page { + background-color: #f7faff; +} + +/* 返回 */ +.navigation { + position: fixed; + top: 0; + left: 0; + z-index: 999; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: transparent; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + +/* 产品图 */ +.banner { + overflow: hidden; + position: relative; + padding-top: 100%; +} + +.swiperCont, +.swiperImg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* 产品详情 */ +.goodsCont { + padding: 30rpx; + border-bottom: 60px solid transparent; + box-sizing: border-box; +} + +.goodsWhite { + background-color: #ffffff; + box-sizing: border-box; + border-radius: 15rpx; + margin-bottom: 30rpx; +} + +.goodsInfo { + padding: 30rpx; + box-sizing: border-box; + position: relative; +} + +.goodsInfo-price { + display: flex; + position: relative; + line-height: 52rpx; + color: #ff9951; +} + +.goodsInfo-cost { + font-size: 48rpx; +} + +.goodsInfo-cost text { + font-size: 28rpx; +} + +.goodsInfo-vip { + background-color: #fff5ed; + border-radius: 80rpx; + margin-left: 30rpx; + padding: 0 25rpx; + height: 52rpx; + font-size: 32rpx; +} + +.goodsInfo-vip text { + font-size: 24rpx; + padding-right: 5rpx; +} + +.goodsInfo-name { + margin-top: 20rpx; + font-size: 32rpx; +} + +.goodsInfo-share { + position: absolute; + top: 40rpx; + right: 30rpx; + display: flex; + font-size: 27rpx; + line-height: 34rpx; + color: #9b9b9b; +} + +.goodsInfo-share-image { + width: 34rpx; + height: 34rpx; + margin-right: 10rpx; +} + +/* 开通vip */ +.vipOpen { + box-sizing: border-box; + position: relative; + padding-top: 17%; + overflow: hidden; +} + +.vipOpen-back { + position: absolute; + width: calc(100% - 60rpx); + height: 100%; + top: 0; + border-radius: 20rpx 20rpx 0 0; + left: 30rpx; + z-index: 1; +} + +.vipOpen-cont { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + z-index: 9; + display: flex; + padding: 15rpx 55rpx; + box-sizing: border-box; +} + +.vipOpen-cont-icon { + width: 60rpx; + height: 60rpx; +} + +.vipOpen-cont-name { + padding: 0 20rpx; + box-sizing: border-box; +} + +.vipOpen-cont-vip { + background-image: linear-gradient(to right, #fbf6d9, #d4af72, #c89a59); + -webkit-background-clip: text; + color: transparent; + font-weight: 600; + margin-bottom: 5rpx; + font-size: 34rpx; +} + +.vipOpen-cont-vip text { + font-style: oblique; + padding-right: 13rpx; +} + +.vipOpen-cont-tips { + color: #f4e1c4; + font-size: 26rpx; +} + +.vipOpen-btn { + position: absolute; + top: 45rpx; + right: 50rpx; + display: flex; + z-index: 9; + line-height: 30rpx; + color: #f4e1c4; + font-size: 28rpx; +} + +.vipOpen-btn-arrow { + width: 30rpx; + height: 30rpx; + margin: 2rpx 0 0 6rpx; +} + +/* 参数 */ +.goodsItem { + padding: 30rpx 30rpx 0; +} + +.goodsItem-label { + display: flex; +} + +.goodsItem-label-name { + color: #999999; + width: 120rpx; + line-height: 110rpx; +} + +.goodsItem-label-see { + display: flex; + width: calc(100% - 120rpx); + background-color: #f7faff; + padding: 10rpx 0; + border-radius: 15rpx; +} + +.goodsItem-label-block { + flex: 3; + text-align: center; + font-size: 26rpx; + position: relative; +} + +.goodsItem-label-block::after { + position: absolute; + content: ''; + background-color: #d1d1d1; + width: 1rpx; + height: 60%; + top: 20%; + left: 0; +} + +.goodsItem-label-block:first-child::after { + display: none; +} + +.goodsItem-label-title { + color: #3b7cff; + line-height: 50rpx; +} + +.goodsItem-label-tips { + color: #999999; +} + +.goodsItem-label-text { + line-height: 110rpx; +} + +/* 详情 */ +.goodsBrief { + padding: 30rpx; + box-sizing: border-box; +} + +/* 底部 */ +.footer { + width: 100%; + height: 60px; + background-color: #ffffff; + position: fixed; + left: 0; + bottom: 0; + z-index: 9; + box-sizing: border-box; + display: flex; +} + +.number { + flex: 1; + line-height: 60px; + color: #ff9951; + display: flex; + padding: 0 30rpx; + box-sizing: border-box; +} + +.number text { + font-size: 28rpx; + padding-top: 10rpx; +} + +.number-price { + padding: 0 5rpx; + font-size: 52rpx; +} + +.number-vip { + margin-left: 20rpx; + font-size: 26rpx; + color: #8d97a1; + padding-top: 6rpx; + box-sizing: border-box; +} + + +.btn { + height: 100%; + background-color: #ff9951; + text-align: center; + color: #FFFFFF; + padding: 0 70rpx; + line-height: 60px; +} + +.detailsBrief-back { + width: 100%; +} + +/* 产品分享弹窗 */ +.goodsShare { + width: 100%; + z-index: 9999; + position: fixed; + bottom: 340rpx; + left: 0; + padding: 40rpx; + box-sizing: border-box; + display: none; +} + +.goodsShare.active { + display: block; +} + +.goodsShare-back { + width: 80%; + margin: 0 auto; + background-color: #ffffff; + border-radius: 15rpx; + overflow: hidden; +} + +.goodsShare-photo { + width: 100%; +} + +.goodsShare-cont { + padding: 30rpx; + box-sizing: border-box; +} + +.goodsShare-name { + font-size: 36rpx; +} + +.goodsShare-price { + font-size: 52rpx; + color: #3b7cff; +} + +.goodsShare-price text { + font-size: 30rpx; +} + +.goodsShare-see { + position: relative; + padding: 40rpx 0 20rpx; +} + +.goodsShare-tips { + font-size: 28rpx; + color: #b3b3b3; + margin-top: 10rpx; +} + +.goodsShare-code { + width: 130rpx; + height: 130rpx; + position: absolute; + right: 0; + top: 30rpx; +} + +/* 分享弹出 */ + +.shareBack { + position: fixed; + width: 100vw; + height: 100vh; + z-index: 9900; + left: 0; + bottom: 0; + background-color: rgba(0, 0, 0, .6); + display: none; +} + +.shareBack.active { + display: block; +} + +.sharePop { + position: fixed; + width: 100%; + z-index: 9999; + left: 0; + bottom: 0; + background-color: #ffffff; + display: none; + height: 280rpx; +} + +.sharePop.active { + display: block; +} + +.shareCont-label image { + width: 60rpx; + height: 60rpx; + display: block; + margin: 0 auto 10rpx; +} + +.shareCancel { + border-top: 2rpx solid #dddddd; + width: 100%; + text-align: center; + line-height: 100rpx; +} + +.shareCont { + display: flex; + padding: 30rpx 0; +} + +.shareCont-label { + flex: 2; + text-align: center; + font-size: 28rpx; +} + +.codeShare-button { + background-color: transparent; + padding: 0; + font-weight: normal; +} + +/* canvas */ +.canvas-img { + position: fixed; + left: -100000%; + top: 0; + z-index: 99; +} + + +/* 邀请码弹出 */ +.namePop { + position: fixed; + background-color: rgba(0, 0, 0, .5); + left: 0; + top: 0; + height: 100vh; + width: 100vw; + z-index: 100000; + display: none; +} + +.namePop.active { + display: block; +} + +.nameCont { + -webkit-box-orient: vertical; + -webkit-box-pack: center; + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 100000; + padding: 0 15%; + box-sizing: border-box; + display: none; +} + +.nameCont.active { + display: -webkit-box; +} + +.nameCont-white { + background-color: #ffffff; + border-radius: 15rpx; + overflow: hidden; +} + +.nameCont-top { + padding: 30rpx; + box-sizing: border-box; +} + +.nameCont-title { + font-size: 34rpx; + margin-bottom: 30rpx; +} + +.nameCont-input { + height: 90rpx; + line-height: 90rpx; + position: relative; + background-color: #f3f3f3; + border-radius: 10rpx; + overflow: hidden; + padding: 0 25rpx; + box-sizing: border-box; +} + +.nameCont-input input { + width: calc(100% - 40rpx); + height: 100%; + background-color: transparent; +} + +.nameCont-colse { + width: 40rpx; + height: 40rpx; + top: 25rpx; + right: 20rpx; + position: absolute; + z-index: 9; +} + +.nameCont-btn { + line-height: 100rpx; + background-color: #f3f3f3; + display: flex; + margin-top: 30rpx; + border-top: 2rpx solid #dfdfdf; +} + +.nameCont-btn-go { + text-align: center; + flex: 2; +} + +.nameCont-btn-go:last-child { + position: relative; + color: #ff9951; +} + +.nameCont-btn-go:last-child::after { + position: absolute; + content: ''; + left: 0; + top: 0; + width: 2rpx; + height: 100%; + background-color: #dfdfdf; +} \ No newline at end of file diff --git a/pages/mall/index.js b/pages/mall/index.js new file mode 100644 index 0000000..b42c480 --- /dev/null +++ b/pages/mall/index.js @@ -0,0 +1,32 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + goodsArr: [] //商品列表 + }, + + onLoad(options) { + if(options.invite != undefined) { + getApp().globalData.inviteText = options.invite + } + }, + + onShow() { + // 获取产品首页 + this.mallInfo(); + }, + + /** + * 产品首页 + */ + mallInfo (){ + wx.$api.mall.mallIndex().then(res => { + this.setData({ + goodsArr: res.data.goods + }) + }).catch(err => { }) + }, +}) diff --git a/pages/mall/index.json b/pages/mall/index.json new file mode 100644 index 0000000..224c4c5 --- /dev/null +++ b/pages/mall/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "产品" +} \ No newline at end of file diff --git a/pages/mall/index.wxml b/pages/mall/index.wxml new file mode 100644 index 0000000..0d34e2e --- /dev/null +++ b/pages/mall/index.wxml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + 使用场景 + + 使用方法 + + + + 1.手握瓶身,距离肌肤15公分距离,Z字型喷在脸上; + + + + 2.等待自然风干或用面纸轻轻按压,吸走多余水分; + + + + + + + + 必Buy推荐 + + + + + + + + + + 市场指导价 + ¥{{item.price.price}}/{{item.number}}瓶 + + + VIP会员价 + ¥{{item.price.vip}}/{{item.number}}瓶 + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/mall/index.wxss b/pages/mall/index.wxss new file mode 100644 index 0000000..5f0645c --- /dev/null +++ b/pages/mall/index.wxss @@ -0,0 +1,194 @@ +page { + background-color: #f7faff; +} + +/* 产品轮播 */ +.mallBanner { + padding: 30rpx; + box-sizing: border-box; + width: 100%; +} + +.mallBanner-cont { + position: relative; + border-radius: 20rpx; + padding-top: 45%; + overflow: hidden; + box-shadow: 0 0 20rpx rgba(0, 0, 0, .2); +} + +.mallBanner-see, +.mallBanner-img { + border-radius: 20rpx; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* 修改dot形状 */ +.wx-swiper-dots.wx-swiper-dots-horizontal { + bottom: 25rpx; +} +.wx-swiper-dots .wx-swiper-dot { + width: 32rpx; /*宽*/ + height: 12rpx; /*高*/ + border-radius: 10rpx; /*圆角*/ + background-color: transparent; + border: 4rpx solid #ffffff; + box-sizing: border-box; +} + +.wx-swiper-dot-active { + background-color:#ffffff !important; +} + +/* 使用场景 */ +.scene { + padding: 30rpx; + box-sizing: border-box; +} + +.sceneCont { + background-color: #ffffff; + padding: 30rpx; + box-sizing: border-box; + border-radius: 20rpx; +} + +.sceneCont-title { + text-align: center; + font-weight: 600; + font-size: 34rpx; +} + +.sceneCont-img { + width: 100%; + margin: 30rpx 0; +} + +.sceneCont-item { + display: flex; +} + +.sceneCont-label { + flex: 2; + text-align: center; +} + +.sceneCont-label-img { + width: 150rpx; + height: 150rpx; + box-shadow: 0 0 20rpx rgba(0, 0, 0, .2); + border-radius: 50%; + margin-bottom: 15rpx; +} + +.sceneCont-label-text { + font-size: 24rpx; + font-weight: 300; + padding: 0 15rpx; + text-align: center; +} + +/* 列表 */ +.goods { + padding: 30rpx; + box-sizing: border-box; +} + +.goodsTilte { + font-weight: 600; + font-size: 36rpx; +} + +.goodsCont-item { + position: relative; + border-radius: 20rpx; + overflow: hidden; + width: 100%; + padding-top: 100%; + margin-top: 30rpx; +} + +.goodsCont-item-back, +.goodsCont-item-cont { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.goodsCont-item-cont { + padding: 30rpx 15rpx; + box-sizing: border-box; +} + +.goodsCont-item-photo { + width: 100%; + display: block; +} + +.goodsCont-item-price { + position: relative; + padding-top: 15%; +} +.goodsCont-item-price-back, +.goodsCont-item-price-cont { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.goodsCont-item-price-back { + display: block; +} + +.goodsCont-item-price-cont { + padding: 14rpx 40rpx; + box-sizing: border-box; + display: flex; +} + +.goodsCont-item-price-text { + font-size: 22rpx; +} + +.goodsCont-item-price-left { + flex: 1; +} + +.goodsCont-item-price-white { + color: #ffffff; +} + +.goodsCont-item-price-number { + font-size: 24rpx; +} + +.goodsCont-item-price-number text { + font-weight: 600; + font-size: 40rpx; + padding-left: 6rpx; +} + +.goodsCont-item-price-right { + width: 26%; + text-align: center; +} + +/* 皮肤护理 */ +.nurse { + width: 100%; + padding: 30rpx; + box-sizing: border-box; +} + +.nurse-img { + border-radius: 20rpx; + width: 100%; +} \ No newline at end of file diff --git a/pages/mall/list/list.js b/pages/mall/list/list.js new file mode 100644 index 0000000..6d0a544 --- /dev/null +++ b/pages/mall/list/list.js @@ -0,0 +1,62 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + goodsArr : [], // 商品列表 + page : {}, // 分页信息 + lodingStats : false, // 加载状态 + }, + + onLoad(options) { + + }, + + onShow() { + // 获取产品列表 + this.mallInfo(); + }, + + /** + * 获取产品列表 + */ + mallInfo (page){ + wx.$api.mall.mallList({page : page || 1}).then(res => { + let listArr = this.data.goodsArr, + newData = [] + if(page == 1 || page == undefined) listArr = [] + newData = listArr.concat(res.data.data) + this.setData({ + goodsArr : newData, + page : res.data.page, + lodingStats : false + }) + wx.stopPullDownRefresh() + }).catch(err => { }) + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取产品列表 + this.mallInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取产品列表 + this.mallInfo(pageNumber); + } + } +}) diff --git a/pages/mall/list/list.json b/pages/mall/list/list.json new file mode 100644 index 0000000..c2ef54a --- /dev/null +++ b/pages/mall/list/list.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "产品列表" +} \ No newline at end of file diff --git a/pages/mall/list/list.wxml b/pages/mall/list/list.wxml new file mode 100644 index 0000000..62c75f1 --- /dev/null +++ b/pages/mall/list/list.wxml @@ -0,0 +1,31 @@ + + + + + + + {{item.name}} + {{item.description}} + + {{item.price.vip}}VIP + 原价¥{{item.price.price}} + + + 立即购买 + + + + + + 加载中... + + + 没有更多了~ + + + + + + 暂无数据 + + \ No newline at end of file diff --git a/pages/mall/list/list.wxss b/pages/mall/list/list.wxss new file mode 100644 index 0000000..40e6c86 --- /dev/null +++ b/pages/mall/list/list.wxss @@ -0,0 +1,121 @@ +page { + background-color: #f7faff; +} + +/* 产品列表 */ +.product { + width: 100%; + padding: 30rpx 30rpx 0; + box-sizing: border-box; +} + +.product-title { + font-size: 36rpx; +} + +.product-item { + position: relative; + height: 340rpx; +} + +.product-item-img { + position: absolute; + top: 0; + width: 300rpx; + height: 300rpx; + border-radius: 15rpx; +} + +.product-item-cont { + height: 300rpx; + position: absolute; + top: 0; + left: 0; + width: 100%; + box-sizing: border-box; +} + +.product-item-title { + line-height: 74rpx; + font-size: 32rpx; +} + +.product-item-specs, +.product-item-number { + font-size: 24rpx; + color: #999999; +} + +.product-item-number { + float: right; +} + +.product-item-see { + margin: 30rpx 0 20rpx; + line-height: 48rpx; + overflow: hidden; +} + +.product-item-price { + font-size: 38rpx; + position: relative; + float: left; +} + +.product-item-vip { + position: absolute; + font-size: 20rpx; + top: 0; + right: -60rpx; + background-color: #ff9951; + color: #ffffff; + display: inline-block; + border-radius: 8rpx; + padding: 0 10rpx; + line-height: 32rpx; + transform: scale(.8); +} + +.product-item-vip:before { + content: ""; + display: block; + position: absolute; + top: 50%; + left: -18rpx; + width: 0; + height: 0; + border: 10rpx solid; + margin-top: -10rpx; + border-color: transparent #ff9951 transparent transparent; +} + +.product-item-price text { + font-size: 24rpx; +} + +.product-item-btn { + font-size: 26rpx; + background-color: #ffffff; + border-radius: 80rpx; + height: 76rpx; + line-height: 76rpx; + border: 2rpx solid #000000; + text-align: center; + display: inline-block; + width: 96%; + margin-left: 2%; +} + +.product-item-arrow { + width: 18rpx; + height: 18rpx; + margin-left: 6rpx; +} + +.product-item .product-item-img { + left: 0; +} + +.product-item .product-item-cont { + padding-left: 340rpx; +} \ No newline at end of file diff --git a/pages/mall/webView/webView.js b/pages/mall/webView/webView.js new file mode 100644 index 0000000..24673b6 --- /dev/null +++ b/pages/mall/webView/webView.js @@ -0,0 +1,68 @@ +// pages/mall/webView/webView.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + h5url: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + h5url: decodeURIComponent(options.url) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/mall/webView/webView.json b/pages/mall/webView/webView.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/pages/mall/webView/webView.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/mall/webView/webView.wxml b/pages/mall/webView/webView.wxml new file mode 100644 index 0000000..cb63700 --- /dev/null +++ b/pages/mall/webView/webView.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pages/mall/webView/webView.wxss b/pages/mall/webView/webView.wxss new file mode 100644 index 0000000..b021913 --- /dev/null +++ b/pages/mall/webView/webView.wxss @@ -0,0 +1 @@ +/* pages/mall/webView/webView.wxss */ \ No newline at end of file diff --git a/pages/mall/商品老版本/index.js b/pages/mall/商品老版本/index.js new file mode 100644 index 0000000..b42c480 --- /dev/null +++ b/pages/mall/商品老版本/index.js @@ -0,0 +1,32 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + goodsArr: [] //商品列表 + }, + + onLoad(options) { + if(options.invite != undefined) { + getApp().globalData.inviteText = options.invite + } + }, + + onShow() { + // 获取产品首页 + this.mallInfo(); + }, + + /** + * 产品首页 + */ + mallInfo (){ + wx.$api.mall.mallIndex().then(res => { + this.setData({ + goodsArr: res.data.goods + }) + }).catch(err => { }) + }, +}) diff --git a/pages/mall/商品老版本/index.json b/pages/mall/商品老版本/index.json new file mode 100644 index 0000000..224c4c5 --- /dev/null +++ b/pages/mall/商品老版本/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "产品" +} \ No newline at end of file diff --git a/pages/mall/商品老版本/index.wxml b/pages/mall/商品老版本/index.wxml new file mode 100644 index 0000000..fb47c50 --- /dev/null +++ b/pages/mall/商品老版本/index.wxml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + 必Buy推荐 + + + + + {{item.name}} + {{item.description}} + + {{item.price.vip}}VIP + 原价¥{{item.price.price}} + + + 立即购买 + + + + + + + + + + diff --git a/pages/mall/商品老版本/index.wxss b/pages/mall/商品老版本/index.wxss new file mode 100644 index 0000000..7ce3a6c --- /dev/null +++ b/pages/mall/商品老版本/index.wxss @@ -0,0 +1,169 @@ +page { + background-color: #f7faff; +} + +/* 产品轮播 */ +.mallBanner { + padding: 30rpx; + box-sizing: border-box; + width: 100%; +} + +.mallBanner-cont { + position: relative; + border-radius: 20rpx; + padding-top: 45%; + overflow: hidden; +} + +.mallBanner-see, +.mallBanner-img { + border-radius: 20rpx; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* 产品列表 */ +.product { + width: 100%; + padding: 10rpx 30rpx 0; + box-sizing: border-box; +} + +.product-title { + font-size: 36rpx; +} + +.product-list { + margin: 30rpx 0; +} + +.product-item { + position: relative; + height: 340rpx; +} + +.product-item-img { + position: absolute; + top: 0; + width: 300rpx; + height: 300rpx; + border-radius: 15rpx; +} + +.product-item-cont { + height: 300rpx; + position: absolute; + top: 0; + left: 0; + width: 100%; + box-sizing: border-box; +} + +.product-item-title { + line-height: 74rpx; + font-size: 32rpx; +} + +.product-item-specs, +.product-item-number { + font-size: 24rpx; + color: #999999; +} + +.product-item-number { + float: right; +} + +.product-item-see { + margin: 30rpx 0 20rpx; + line-height: 48rpx; + overflow: hidden; +} + +.product-item-price { + font-size: 38rpx; + position: relative; + float: left; +} + +.product-item-vip { + position: absolute; + font-size: 20rpx; + top: 0; + right: -60rpx; + background-color: #ff9951; + color: #ffffff; + display: inline-block; + border-radius: 8rpx; + padding: 0 10rpx; + line-height: 32rpx; + transform: scale(.8); +} + +.product-item-vip:before { + content: ""; + display: block; + position: absolute; + top: 50%; + left: -18rpx; + width: 0; + height: 0; + border: 10rpx solid; + margin-top: -10rpx; + border-color: transparent #ff9951 transparent transparent; +} + +.product-item-price text { + font-size: 24rpx; +} + +.product-item-btn { + font-size: 26rpx; + background-color: #ffffff; + border-radius: 80rpx; + height: 76rpx; + line-height: 76rpx; + border: 2rpx solid #000000; + text-align: center; + display: inline-block; + width: 96%; + margin-left: 2%; +} + +.product-item-arrow { + width: 18rpx; + height: 18rpx; + margin-left: 6rpx; +} + +.product-item:nth-child(odd) .product-item-img { + left: 0; +} + +.product-item:nth-child(odd) .product-item-cont { + padding-left: 340rpx; +} + +.product-item:nth-child(even) .product-item-img { + right: 0; +} + +.product-item:nth-child(even) .product-item-cont { + padding-right: 340rpx; +} + +/* 皮肤护理 */ +.nurse { + width: 100%; + padding: 0 30rpx 30rpx; + box-sizing: border-box; +} + +.nurse-img { + border-radius: 20rpx; + width: 100%; +} \ No newline at end of file diff --git a/pages/order/details/details.js b/pages/order/details/details.js new file mode 100644 index 0000000..f5ce171 --- /dev/null +++ b/pages/order/details/details.js @@ -0,0 +1,133 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + goodsData : '', //详情 + canState : '', //操作按钮 + express : '', //物流 + orderNo : '' //订单号 + }, + + onLoad(options) { + this.setData({ + orderNo: options.order_no + }) + }, + + onShow() { + // 获取订单详情 + this.goodsInfo(); + }, + + /** + * 订单详情 + */ + goodsInfo() { + wx.$api.order.goodsDet(this.data.orderNo).then(res => { + this.setData({ + goodsData : res.data, + canState : res.data.can, + express : res.data.express + }) + }).catch(err => {}) + }, + + /** + * 复制订单号 + */ + copyUrl(val) { + wx.setClipboardData({ + data: val.currentTarget.dataset.no, + success: () => { + wx.showToast({ + title: "订单编号复制成功", + icon : "none" + }) + } + }) + }, + + /** + * 支付订单 + */ + payClick() { + wx.navigateTo({ + url: '/pages/pay/index?order_no=' + this.data.goodsData.order_no + '&total=' + this.data.goodsData.total + }) + }, + + /** + * 订单签收 + */ + signClick(e) { + wx.showModal({ + title : '提示', + content : '是否签收', + success : res=> { + if (res.confirm) { + wx.$api.order.goodsSign(this.data.goodsData.order_no).then(res => { + wx.showToast({ + title:'签收成功', + icon:'none' + }) + + // 获取订单详情 + this.goodsInfo(); + }).catch(err => {}) + } + } + }) + }, + + /** + * 取消订单 + */ + cancelClick(e) { + wx.showModal({ + title : '提示', + content : '是否取消订单', + success : res=> { + if (res.confirm) { + wx.$api.order.goodsCancel(this.data.goodsData.order_no).then(res => { + wx.showToast({ + title:'取消成功', + icon:'none' + }) + + // 回到列表 + wx.navigateBack(1) + }).catch(err => {}) + } + } + }) + }, + + /** + * 复制物流单号 + */ + copyExpress(val) { + wx.setClipboardData({ + data: val.currentTarget.dataset.no, + success: () => { + wx.showToast({ + title: "物流单号复制成功", + icon : "none" + }) + } + }) + }, + + // 查看物流 + h5url() { + // wx.navigateTo({ + // url: '/pages/mall/webView/webView?url=' + this.data.goodsData.express.url, + // }) + var data = JSON.stringify(this.data.goodsData.express) + wx.navigateTo({ + url: `../logistic/logistic?newData=` + encodeURIComponent(data) + }) + } +}) diff --git a/pages/order/details/details.json b/pages/order/details/details.json new file mode 100644 index 0000000..7418a99 --- /dev/null +++ b/pages/order/details/details.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "订单详情" +} \ No newline at end of file diff --git a/pages/order/details/details.wxml b/pages/order/details/details.wxml new file mode 100644 index 0000000..47565d5 --- /dev/null +++ b/pages/order/details/details.wxml @@ -0,0 +1,94 @@ + + + + + + 订单编号 + + {{goodsData.order_no}} + 复制 + + + + + + + {{ goodsData.express.name }} {{ goodsData.express.mobile }} + + {{ goodsData.express.full_address }} + + + + + + + + + + {{item.sku.goods_name}} + + 规格 99mlx{{item.qty}} + + + ¥{{item.price}} + + + + + + + 订单信息 + + 交易时间 + {{goodsData.created_at}} + + + 运费 + {{goodsData.freight == 0 ? '免邮' : goodsData.freight + '元'}} + + + 交易状态 + {{goodsData.state}} + + + 兑换券使用 + {{goodsData.coupon_qty}}张 + + + 兑换券抵值 + ¥{{goodsData.coupon_price}} + + + 实付款 + ¥{{goodsData.total}} + + + + + 物流信息 + + 物流名称 + {{goodsData.express.express_name}} + + + 物流单号 + + {{goodsData.express.express_no}}复制 + + + + 查看物流信息 + + 去查看 + + + + + + + 取消订单 + 立即付款 + 签收订单 + 返回订单 + + \ No newline at end of file diff --git a/pages/order/details/details.wxss b/pages/order/details/details.wxss new file mode 100644 index 0000000..1127882 --- /dev/null +++ b/pages/order/details/details.wxss @@ -0,0 +1,234 @@ +page { + background: #f3f4f6; + padding: 30rpx; + box-sizing: border-box; +} + +.While { + border-radius: 10rpx; + margin-bottom: 30rpx; + background-color: #FFFFFF; + box-shadow: 0 0 10rpx rgba(0, 0, 0, .05); +} + +.orderData { + border-bottom: 100rpx transparent solid; +} + +/* 订单 */ +.orderData-cont-label { + padding: 40rpx 30rpx; + display: flex; + box-sizing: border-box; + border-bottom: #f2f2f2 2rpx solid; +} + +.orderData-cont-img { + width: 38rpx; + height: 38rpx; + margin-top: 4rpx; +} + +.orderData-cont-text { + width: calc(100% - 68rpx); + margin-left: 20rpx; + box-sizing: border-box; + font-size: 30rpx; +} + +.orderData-cont-site { + width: calc(100% - 108rpx); +} + +.orderData-cont-name { + margin-bottom: 10rpx; +} + +.orderData-cont-name text { + color: #999; + padding-left: 20rpx; +} + +.orderData-cont-copy { + display: flex; + font-size: 28rpx; + color: #999; +} + +.orderData-cont-copy text { + flex: 1; + display: inline-block; + margin-right: 20rpx; +} + +.orderData-cont-copy view { + color: #3b7cff; +} + +.address-btn { + width: 42rpx; + height: 42rpx; + margin-top: 46rpx; +} + +/* 产品 */ +.list-goods { + display: flex; + padding: 30rpx; + box-sizing: border-box; +} + +.list-goods-img { + width: 184rpx; + height: 184rpx; + margin-right: 30rpx; + border-radius: 10rpx; +} + +.list-goods-cont { + width: calc(100% - 214rpx); +} + +.list-goods-name { + font-size: 32rpx; +} + +.list-goods-text { + line-height: 90rpx; + display: flex; + font-size: 28rpx; + color: #999999; +} + +.list-goods-text text { + flex: 1; +} + +.list-goods-parice { + text-align: right; + font-size: 28rpx; +} + +.list-goods-parice text { + font-size: 34rpx; +} + +/* 规格 */ +.reserveCont-title { + padding: 30rpx; + font-size: 30rpx; +} + +.reserve-label { + display: flex; + padding: 0 30rpx 30rpx; + box-sizing: border-box; + font-size: 28rpx; + line-height: 48rpx; +} + +.reserve-name { + flex: 1; + width: 200rpx; + margin-right: 20rpx; + color: #7e7e7e; +} + +.reserve-text { + width: calc(100% - 240rpx); + text-align: right; + line-height: 50rpx; +} + +.reserve-text-btn { + width: 120rpx; + text-align: center; + color: #ffffff; + background-color: #3b7cff; + font-size: 26rpx; + border-radius: 10rpx; + line-height: 54rpx; +} + +.reserve-text-copy { + display: contents; +} + +.reserve-text-tap { + color: #ff9951; + padding-left: 30rpx; +} + +.reserve-text text { + font-size: 24rpx; + display: inline-block; + background-image: linear-gradient(to right, #f16e06, #f34206); + color: #FFFFFF; + border-radius: 6rpx; + padding: 0 10rpx; + height: 44rpx; + line-height: 44rpx; + margin-top: 6rpx; +} + +.reserve-text text.active { + background-image: linear-gradient(to right, #027be6, #2855f0); +} + +.reserve-text.reserve-price { + font-weight: 600; + font-size: 34rpx; +} + +.reserve-copy { + color: #3b7cff; + border: #3b7cff 2rpx solid; + display: inline-block; + height: 34rpx; + line-height: 34rpx; + font-size: 26rpx; + padding: 0 10rpx; + border-radius: 4rpx; + margin-left: 10rpx; +} + +.reserve-status { + color: #ff8100 +} + +/* 底部菜单 */ +.order-data-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; + border-top: solid 1rpx #f2f2f2; + padding-top: 20rpx; + padding-right: 30rpx; + padding-left: 30rpx; + height: 110rpx; + background: white; + flex-wrap: wrap; + flex-direction: row-reverse; + z-index: 9; +} + +.list-btn { + text-align: right; +} + +.order-btn { + border: 2rpx solid #ff8100; + color: #ff8100; + border-radius: 80rpx; + height: 56rpx; + line-height: 56rpx; + padding: 0 20rpx; + display: inline-block; + font-size: 26rpx; + margin-left: 30rpx; +} +.order-btn.grey { + color: grey; + border-color: grey; +} \ No newline at end of file diff --git a/pages/order/index.js b/pages/order/index.js new file mode 100644 index 0000000..8e1e0f7 --- /dev/null +++ b/pages/order/index.js @@ -0,0 +1,141 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + listType : '', // 订单状态 + listsArr : [], // 订单列表 + page : {}, // 分页信息 + lodingStats : false,// 加载状态 + }, + + onLoad(options) { + this.setData({ + listType: options.list_type + }) + }, + + onShow() { + // 获取订单列表 + this.listInfo() + }, + + /** + * 订单列表 + */ + listInfo(page) { + wx.$api.order.list({ + state: this.data.listType, + page : page || 1 + }).then(res => { + let listArr = this.data.listsArr, + newData = [] + if(page == 1 || page == undefined) listArr = [] + newData = listArr.concat(res.data.data) + this.setData({ + listsArr : newData, + page : res.data.page, + lodingStats : false + }) + wx.stopPullDownRefresh() + }).catch(err => {}) + }, + + /** + * 状态筛选 + */ + onTabs(val){ + if(this.data.listType === val) return + this.setData({ + listType: val.currentTarget.dataset.type + }) + + // 获取订单列表 + this.listInfo() + }, + + /** + * 支付订单 + */ + payClick(e) { + wx.navigateTo({ + url: '/pages/pay/index?order_no=' + e.currentTarget.dataset.order_no + '&total=' + e.currentTarget.dataset.total + }) + }, + + /** + * 更多操作 + */ + operateMore(e) { + wx.showActionSheet({ + itemList: ['取消订单'], + success: ()=> { + wx.showModal({ + title : '提示', + content : '是否取消订单', + success : res=> { + if (res.confirm) { + wx.$api.order.goodsCancel(e.currentTarget.dataset.order_no).then(res => { + wx.showToast({ + title:'取消成功', + icon:'none' + }) + // 获取订单列表 + this.listInfo() + }).catch(err => {}) + } + } + }) + }, + fail: err=> {} + }) + }, + + /** + * 订单签收 + */ + signClick(e) { + wx.showModal({ + title : '提示', + content : '是否签收', + success : res=> { + if (res.confirm) { + wx.$api.order.goodsSign(e.currentTarget.dataset.order_no).then(res => { + wx.showToast({ + title:'签收成功', + icon:'none' + }) + + // 获取订单列表 + this.listInfo() + }).catch(err => {}) + } + } + }) + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取订单列表 + this.listInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取订单列表 + this.listInfo(pageNumber); + } + } +}) diff --git a/pages/order/index.json b/pages/order/index.json new file mode 100644 index 0000000..e3130c7 --- /dev/null +++ b/pages/order/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "我的订单" +} \ No newline at end of file diff --git a/pages/order/index.wxml b/pages/order/index.wxml new file mode 100644 index 0000000..c1dc192 --- /dev/null +++ b/pages/order/index.wxml @@ -0,0 +1,66 @@ + + + 全部 + 待付款 + 待发货 + 待收货 + 已签收 + + + + + + + 订单编号{{item.order_no}} + {{item.state}} + + + + + {{goodItem.sku.goods_name}} + + 规格 99mlx{{goodItem.qty}} + + + ¥{{goodItem.sku.price}} + + + + + 需付款 + {{item.total}} + + + 兑换券兑换 + + + + 收货城市 + + {{item.province_city}} + + + + 更多 + + + 立即付款 + 签收订单 + 查看详情 + + + + + + 加载中... + + + 没有更多了~ + + + + + + + 暂无数据 + \ No newline at end of file diff --git a/pages/order/index.wxss b/pages/order/index.wxss new file mode 100644 index 0000000..db234d1 --- /dev/null +++ b/pages/order/index.wxss @@ -0,0 +1,174 @@ +page { + background-color: #f7faff; +} + +/* tabs */ +.header { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 99; + height: 100rpx; + background-color: #f7faff; +} + +.tabs { + display: flex; + justify-content: space-around; + padding: 30rpx 10rpx; + font-size: 30rpx; + color: #3c3d3e; +} + +.tabs-item.show { + color: #3b7cff; +} + +/* 列表 */ +.list { + padding: 20rpx 30rpx 30rpx; + box-sizing: border-box; + margin-top: 100rpx; +} + +.list-item { + background-color: #ffffff; + border-radius: 20rpx; + padding: 30rpx; + box-sizing: border-box; + margin-bottom: 30rpx; + box-shadow: 0 4rpx 30rpx 2rpx rgba(0, 0, 0, .05); +} + +.list-top { + display: flex; + margin-bottom: 30rpx; + line-height: 48rpx; +} + +.list-top-no { + flex: 1; +} + +.list-top-status { + color: #ff8100; +} + +.list-goods { + display: flex; +} + +.list-goods-img { + width: 184rpx; + height: 184rpx; + margin-right: 30rpx; + border-radius: 10rpx; +} + +.list-goods-cont { + width: calc(100% - 214rpx); +} + +.list-goods-name { + font-size: 32rpx; +} + +.list-goods-text { + line-height: 90rpx; + display: flex; + font-size: 28rpx; + color: #999999; +} + +.list-goods-text text { + flex: 1; +} + +.list-goods-parice { + text-align: right; + font-size: 28rpx; +} + +.list-goods-parice text { + font-size: 34rpx; +} + +.list-total { + text-align: right; + margin-top: 30rpx; + font-size: 32rpx; +} + +.list-total.active { + color: #3b7cff; +} + +.list-total text { + font-size: 30rpx; +} + +.list-total-price { + display: inline-block; + font-weight: 600; + font-size: 38rpx; +} + +.list-tips { + background-color: #f7faff; + display: flex; + padding: 20rpx 30rpx; + box-sizing: border-box; + margin: 30rpx 0 40rpx; + border-radius: 10rpx; + line-height: 44rpx; + font-size: 28rpx; +} + +.list-tips-left { + display: flex; + margin-right: 40rpx; +} + +.list-tips-img { + width: 44rpx; + height: 44rpx; + margin-right: 10rpx; +} + +.list-tips-right { + color: #707070; + width: calc(100% - 210rpx); +} + +.list-operate { + display: flex; +} + +.list-more { + flex: 1; + line-height: 56rpx; + font-size: 26rpx; + color: #999999; +} + +.list-btn { + text-align: right; +} + +.list-btn-labor { + border: 2rpx solid #ff8100; + color: #ff8100; + border-radius: 80rpx; + height: 56rpx; + line-height: 56rpx; + padding: 0 25rpx; + display: inline-block; + font-size: 26rpx; + margin-left: 30rpx; +} + +.list-btn-labor.grey { + color: grey; + border-color: grey; +} \ No newline at end of file diff --git a/pages/order/logistic/logistic.js b/pages/order/logistic/logistic.js new file mode 100644 index 0000000..1c6ea81 --- /dev/null +++ b/pages/order/logistic/logistic.js @@ -0,0 +1,43 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + logisticArr : [], + expressData : '', + }, + + onLoad(options) { + const { + newData = {} + } = options; + const data = JSON.parse(decodeURIComponent(newData)); + this.setData({ + expressData: data + }) + }, + + onShow() { + // 查看物流 + this.h5url(); + }, + + // 查看物流 + h5url() { + wx.$api.order.kuaiDi({express_no: this.data.expressData.express_no}).then(res => { + this.setData({ + logisticArr: res.data.data + }) + }).catch(err => {}) + // wx.request({ + // url: 'http://shanhe.kim/api/za/kuaidi.php?id=' + this.data.expressData.express_no, //需更换需请求数据的接口 + // success: res=> { + // this.setData({ + // logisticArr: res.data.data + // }) + // }, + // }); + } +}) diff --git a/pages/order/logistic/logistic.json b/pages/order/logistic/logistic.json new file mode 100644 index 0000000..e2aeb4c --- /dev/null +++ b/pages/order/logistic/logistic.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "物流信息" +} \ No newline at end of file diff --git a/pages/order/logistic/logistic.wxml b/pages/order/logistic/logistic.wxml new file mode 100644 index 0000000..5bf0bc3 --- /dev/null +++ b/pages/order/logistic/logistic.wxml @@ -0,0 +1,44 @@ + + + + + + {{expressData.express_name}} + + {{expressData.express_no}} + + + + {{expressData.name}}{{expressData.mobile}} + + + + + + + 收 + + + {{expressData.full_address}} + + + + + + + {{item.time}} + + + + {{item.context}} + + + + + + + + 暂无物流信息 + \ No newline at end of file diff --git a/pages/order/logistic/logistic.wxss b/pages/order/logistic/logistic.wxss new file mode 100644 index 0000000..b1728ce --- /dev/null +++ b/pages/order/logistic/logistic.wxss @@ -0,0 +1,141 @@ +.top { + background-color: #3b7cff; + padding: 30rpx 30rpx 60rpx; + box-sizing: border-box; + display: flex; +} + +.top-logo { + background-color: #ffffff; + border-radius: 10rpx; + width: 100rpx; + height: 100rpx; + padding: 10rpx; + box-sizing: border-box; +} + +.top-logo image { + width: 100%; + height: 100%; +} + +.top-cont { + color: #ffffff; + width: calc(100% - 130rpx); + margin-left: 30rpx; +} + +.top-name { + display: flex; + line-height: 44rpx; + padding: 10rpx 0; +} + +.top-no { + font-size: 26rpx; + padding-left: 30rpx; + opacity: .9; +} + +.top-type { + font-size: 24rpx; +} + +.top-type text { + padding-left: 20rpx; +} + +.address { + color: #333333; + font-size: 24rpx; + display: flex; + padding: 30rpx 30rpx 0; +} + +.address-tips { + width: 54rpx; + text-align: center; + height: 54rpx; + line-height: 54rpx; + border-radius: 50%; + background-color: #EEEEEE; + margin-left: -15rpx; + font-size: 24rpx +} + +.address-text { + width: calc(100% - 74rpx); + margin-left: 20rpx; + padding-top: 10rpx; +} + +.white { + margin-top: -30rpx; + background-color: #ffffff; + border-radius: 20rpx; +} + +.list { + padding: 0 30rpx; + box-sizing: border-box; +} + +.item { + padding-bottom: 40rpx; + padding-left: 40rpx; + box-sizing: border-box; + position: relative; +} + +.item:first-child { + padding-top: 30rpx; +} + +.item::after { + position: absolute; + content: ''; + background-color: #DDDDDD; + width: 14rpx; + height: 14rpx; + border-radius: 50%; + left: 0; + top: calc(50% - 6rpx); + z-index: 3; + border: 2rpx solid #ffffff; +} + +.item::before { + position: absolute; + content: ''; + background-color: #F0F0F0; + width: 2rpx; + height: 100%; + border-radius: 50%; + left: 8rpx; + top: 0; +} + +.item-name { + display: flex; +} + +.item-status { + font-weight: 600; + padding-right: 20rpx; +} + +.item-time { + color: #868686; +} + +.item-text { + color: #868686; + font-size: 24rpx; + line-height: 40rpx; + margin-top: 20rpx; +} + +.item:first-child .item-time, +.item:first-child .item-text { + color: #ff8100 !important; +} diff --git a/pages/pay/index.js b/pages/pay/index.js new file mode 100644 index 0000000..704fcf9 --- /dev/null +++ b/pages/pay/index.js @@ -0,0 +1,111 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + payCode : '', // code获取openid + openId : '', // openid + orderNo : '', // 订单编号 + total : '', // 订单金额 + paySuccess : false, // 兑换成功显示 + disabled : true + }, + + onLoad(options) { + this.setData({ + orderNo : options.order_no, + total : options.total + }) + }, + + onShow() { + wx.login({ + success: res => { + this.setData({ + payCode: res.code + }) + + // 获取openid + this.openInfo() + } + }) + }, + + /** + * openid + */ + openInfo() { + wx.$api.auth.codeOpenid({code: this.data.payCode}).then(res => { + this.setData({ + openId: res.data + }) + }).catch(err => {}) + }, + + /** + * 确认支付 + */ + payBtn() { + wx.showLoading({ + title: '支付中...', + mask : true + }) + let that = this + wx.$api.mall.mallPay(this.data.orderNo,{type: 'miniapp', openid: this.data.openId}).then(res=>{ + wx.hideLoading() + this.setData({ + disabled: false + }) + let payInfo = JSON.parse(res.data.wechat) + 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: 'none', + duration: 2000, + //显示透明蒙层,防止触摸穿透 + mask:true, + success: function () { + that.setData({ + paySuccess: true + }) + setTimeout(()=>{ + wx.redirectTo({ + url: '/pages/order/index?state=paid' + }) + },3000) + } + }) + } + }, + fail : err=>{ + wx.showToast({ + title: '支付失败', + icon: 'none', + duration: 500, + //显示透明蒙层,防止触摸穿透 + mask:true, + success: function () { + that.setData({ + paySuccess: true + }) + setTimeout(()=>{ + wx.redirectTo({ + url: '/pages/order/index?state=unpay' + }) + },3000) + } + }) + } + }) + }).catch(err => {}); + } +}) diff --git a/pages/pay/index.json b/pages/pay/index.json new file mode 100644 index 0000000..98b0432 --- /dev/null +++ b/pages/pay/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "支付订单" +} \ No newline at end of file diff --git a/pages/pay/index.wxml b/pages/pay/index.wxml new file mode 100644 index 0000000..c09abef --- /dev/null +++ b/pages/pay/index.wxml @@ -0,0 +1,23 @@ + + 支付有效期为10分钟,请尽快支付 + {{total}} + 微信支付 + + + + + + 微信支付 + + + + + + 确认支付 + 确认支付 + + + + + 疯狂加载中... + \ No newline at end of file diff --git a/pages/pay/index.wxss b/pages/pay/index.wxss new file mode 100644 index 0000000..43ae7b2 --- /dev/null +++ b/pages/pay/index.wxss @@ -0,0 +1,86 @@ +page { + background-color: #f4f4f6; +} + +.payTop { + text-align: center; + padding: 140rpx 0; +} + +.payTop-price { + font-weight: 600; + font-size: 78rpx; + line-height: 70rpx; + padding: 20rpx 0 0; +} + +.payTop-price text { + font-size: 36rpx; +} + +.payTop-time, +.payTop-text { + font-size: 28rpx; + color: #666666; +} + +.payWay { + padding: 0 30rpx; + box-sizing: border-box; +} + +.payWay-item { + background-color: #ffffff; + border-radius: 15rpx; + padding: 25rpx 30rpx; + box-sizing: border-box; + display: flex; + line-height: 74rpx; + font-size: 34rpx; + position: relative; +} + +.payWay-img { + width: 74rpx; + height: 74rpx; + margin-right: 20rpx; +} + +.payWay-icon { + width: 42rpx; + height: 42rpx; + position: absolute; + right: 30rpx; + top: 40rpx; +} + + +/* 按钮 */ +.footer { + width: 100%; + height: 100px; + background-color: #f4f4f6; + position: fixed; + left: 0; + bottom: 0; + z-index: 9; + padding: 20px 20px 50rpx; + box-sizing: border-box; +} + +.btn { + line-height: 54px; + background-color: #3b7cff; + height: 100%; + text-align: center; + color: #FFFFFF; + border-radius: 10rpx; +} +.btn.active { + background-color: #cacaca; +} + +.grey { + background-color: #f9f9f9; + z-index: 99999; +} \ No newline at end of file diff --git a/pages/report/detail/detail.js b/pages/report/detail/detail.js new file mode 100644 index 0000000..25efa08 --- /dev/null +++ b/pages/report/detail/detail.js @@ -0,0 +1,155 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +var startPoint; +const min = 0; // 最小宽度 单位px +const max = 200; // 最大宽度  单位px + +Page({ + data: { + barHeight : getApp().globalData.barHeight, // 状态栏高度 + isFixedTop : 0, + loading : true, + imageId : '', // 报告id + coverImg : '', // 上传的图片 + analyze : '', // 检测结果 + createdAt : '', // 检测时间 + footerPop : '', //底部菜单优先级 + enlargedNumber : '', // 毛孔总数量 + sensitivityArea: '', // 敏感区域面积 + tactfulFace : false, // 敏感分析 + acneFace : false, // 痤疮 + oldFace : false, //衰老分析 + pigmentFace : false, // 色素分析 + pigmentFace : false, // 黑头分析 + poreStatus : false, // 毛孔 + + zoneArea : '', // 油光占比 额头 + leftcheekArea : '', // 油光占比 左脸颊 + rightcheekArea : '', // 油光占比 右脸颊 + + buttonLeft: 100, + progress: 100, // 进度条的宽度,这里的单位是px,所以在wxml文件中要改为rpx + precent: 50 // 这个是百分比 + }, + + onLoad(options) { + this.setData({ + imageId: options.image_id + }) + + // 获取检测报告结果 + this.aiInfo(options.image_id) + }, + + /** + * 检测报告结果 + */ + aiInfo(imageid) { + wx.$api.health.aiSee(imageid).then(res => { + this.setData({ + loading : false, + createdAt: res.data.created_at, + coverImg: res.data.cover, + analyze : res.data.skin_analyze.result.result, + sensitivityArea: (res.data.skin_analyze.result.result.sensitivity.sensitivity_area * 100).toFixed(3), + enlargedNumber: res.data.skin_analyze.result.result.enlarged_pore_count.forehead_count + res.data.skin_analyze.result.result.enlarged_pore_count.chin_count + res.data.skin_analyze.result.result.enlarged_pore_count.right_cheek_count + res.data.skin_analyze.result.result.enlarged_pore_count.left_cheek_count, + zoneArea : (res.data.skin_analyze.result.result.oily_intensity.t_zone.area * 100).toFixed(1), + leftcheekArea : (res.data.skin_analyze.result.result.oily_intensity.left_cheek.area * 100).toFixed(1), + rightcheekArea : (res.data.skin_analyze.result.result.oily_intensity.right_cheek.area * 100).toFixed(1), + }) + }).catch(err => { }) + }, + + /** + * 返回上一页 + */ + returnGo() { + wx.navigateBack({ + delta: 1 + }) + }, + + /** + * 查看检测图 + */ + faceSee(e) { + this.setData({ + footerPop: !this.data.footerPop, + progress: 100, + precent: 50 + }) + let type = e.currentTarget.dataset.type + if(type == 'old') { + // 衰老 + this.setData({ + oldFace : !this.data.oldFace + }) + } else if(type == 'acne') { + // 痤疮 + this.setData({ + acneFace : !this.data.acneFace + }) + } else if(type == 'tactful') { + // 敏感 + this.setData({ + tactfulFace : !this.data.tactfulFace + }) + } else if(type == 'pigment') { + // 色素性 + this.setData({ + pigmentFace : !this.data.pigmentFace + }) + } else if(type == 'black') { + // 黑头 + this.setData({ + blackFace : !this.data.blackFace + }) + } else if(type == 'pore') { + // 毛孔 + this.setData({ + poreStatus : !this.data.poreStatus + }) + } + + + }, + + /** + * 查看检测图-状态栏 + */ + buttonStart (e) { + startPoint = e.touches[0] + }, + + moveTo(e) { + var endPoint = e.touches[e.touches.length - 1] + var translateX = endPoint.clientX - startPoint.clientX + startPoint = endPoint; + var buttonLeft = this.data.buttonLeft + translateX; + if (buttonLeft > max) { + // 滑动位置大于进度条最大宽度的时候让它为最大宽度 + buttonLeft = max + } + if (buttonLeft < min) { + // 滑动位置小于进度条最大宽度的时候让它为最小宽度 + buttonLeft = min + } + this.setData({ + buttonLeft: buttonLeft, + progress: buttonLeft, + precent:parseInt((buttonLeft/max)*100) + }) + }, + + /** + * 监听页面滑动事件 + */ + onPageScroll(e) { + this.setData({ + isFixedTop: parseInt(e.scrollTop) + }); + }, +}) diff --git a/pages/report/detail/detail.json b/pages/report/detail/detail.json new file mode 100644 index 0000000..f0f1934 --- /dev/null +++ b/pages/report/detail/detail.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom", + "navigationBarTextStyle": "white" +} \ No newline at end of file diff --git a/pages/report/detail/detail.wxml b/pages/report/detail/detail.wxml new file mode 100644 index 0000000..0a942a1 --- /dev/null +++ b/pages/report/detail/detail.wxml @@ -0,0 +1,388 @@ + + + 疯狂加载中 + + + + + + + + + + + {{createdAt.m_d}} + {{createdAt.time}} + + + + + + + + 皮肤概况 + + + + + + + + + 油性肤质 + 干性皮肤 + 中性皮肤 + 混合性皮肤 + + 肤质 + + + + + 透白 + 白皙 + 自然 + 小麦 + 黝黑 + + 肤色 + + + {{analyze.skin_age.value}} + 肌龄 + + + + + + + 油光占比 + + + 额头 + + + + {{zoneArea}}% + + + 左脸颊 + + + + {{leftcheekArea}}% + + + 右脸颊 + + + + {{rightcheekArea}}% + + + + + + + + + 衰老分析 + + + + + + 查看检测图 + + + + + + + + + + + + + + + + + + + + + + + 抬头纹:{{analyze.forehead_wrinkle.value == 0 ? '无' : '有'}} + + + 法令纹:{{analyze.nasolabial_fold.value == 0 ? '无' : '有'}} + + + 鱼尾纹:{{analyze.crows_feet.value == 0 ? '无' : '有'}} + + + 眉间纹:{{analyze.glabella_wrinkle.value == 0 ? '无' : '有'}} + + + 额头区域细纹:{{analyze.fine_line.forehead_count}}处 + + + 左眼部区域细纹:{{analyze.fine_line.left_undereye_count}}处 + + + 右眼部区域细纹:{{analyze.fine_line.right_undereye_count}}处 + + + 额头区域深纹:{{analyze.wrinkle_count.forehead_count}}处 + + + 左眼部区域深纹:{{analyze.wrinkle_count.left_undereye_count}}处 + + + 右眼部区域深纹:{{analyze.wrinkle_count.right_undereye_count}}处 + + + + + + + + 眼袋 + + + + + + + + + 您{{analyze.eye_pouch.value == 0 ? '无' : '有'}}眼袋,{{analyze.eye_pouch.value == 0 ? '没有眼袋正常,可能个人护理比较好' : '受长期不规律作息和年龄增长,皮 肤弹性减弱影响。'}} + + + + + + + + 黑眼圈 + + + + + + + + + 您是{{analyze.dark_circle.value == 0 ? '无' : '有'}}黑眼圈,{{analyze.dark_circle.value == 0 ? '没有黑眼圈通常是生活习惯比较好,主要是平时没有熬夜的习惯' : '可能由长期熬夜、日晒、年龄增长、眼周围皮肤炎症等因素导致'}} + + + + + + + + 敏感度分析 + + + + + + 敏感程度 + {{analyze.sensitivity.sensitivity_intensity}} + + + + + + 敏感区域面积占比 + {{sensitivityArea}}% + + + + + + 查看检测图 + + + + + + + + + + + + + + + + + + + + + + + 毛孔分析 + + + + + + 毛孔数量 + {{enlargedNumber}} + + + + + + 查看检测图 + + + + + + + + + + + + + + + + + + + + + + + 额头粗大毛孔数:{{analyze.enlarged_pore_count.forehead_count}}个 + 下巴粗大毛孔数:{{analyze.enlarged_pore_count.chin_count}}个 + 右脸颊粗大毛孔数:{{analyze.enlarged_pore_count.right_cheek_count}}个 + 左脸颊粗大毛孔数:{{analyze.enlarged_pore_count.left_cheek_count}}个 + + + + + + + + 黑头分析 + + + + + + 黑头分析 + {{analyze.blackhead_count}}个 + + + + + + 查看检测图 + + + + + + + + + + + + + + + + + + + + + + + + + + 色素性分析 + + + + + + 痤疮 + {{analyze.acne.rectangle.length}}处 + + + + + + 闭口粉刺 + {{analyze.closed_comedones.rectangle.length}}处 + + + + + + + 色斑 + {{analyze.brown_spot.rectangle.length}}处 + + + + + + + {{analyze.mole.rectangle.length}}处 + + + + + + 查看检测图 + + + + + + + + + + + + + + + + + + + + + + + + + + + 邀请好友 + 产品推荐 + + + \ No newline at end of file diff --git a/pages/report/detail/detail.wxss b/pages/report/detail/detail.wxss new file mode 100644 index 0000000..a1e6e69 --- /dev/null +++ b/pages/report/detail/detail.wxss @@ -0,0 +1,619 @@ +page { + background-color: #f7faff; +} + + +.grey { + background-color: #f9f9f9; +} + +/* 返回 */ +.navigation { + position: fixed; + top: 0; + left: 0; + z-index: 1999; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: transparent; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + +/* 顶部背景 */ +.top { + width: 100%; + position: relative; + height: 800rpx; + overflow: hidden; +} + +.top-back { + position: absolute; + height: 100%; + left: 0; + top: 0; + width: 100%; + z-index: 1; +} + +.top-date { + padding: 30rpx; + box-sizing: border-box; + position: absolute; + left: 0; + top: 370rpx; + width: 100%; + z-index: 9; + color: #6d9eff; + font-size: 28rpx; +} + +.top-date text { + display: block; +} + +.top-date::after, +.top-date::before { + position: absolute; + content: ''; + left: 30rpx; + background-color: #a7c5ff; + width: 100rpx; + height: 4rpx; +} + +.top-date::after { + top: 15rpx; +} + +.top-date::before { + bottom: 15rpx; +} + +/* 内容 */ +.seeCont { + position: absolute; + top: 460rpx; + z-index: 1000; + width: 100%; + padding: 60rpx 30rpx; + box-sizing: border-box; + border-bottom: 80px solid transparent; +} + +/* 皮肤概况 */ +.survey { + background-image: linear-gradient(90deg,rgba(255,255,255,0), transparent); + border-radius: 15rpx; + padding: 0 30rpx; + box-sizing: border-box; +} + +.survey-title { + text-align: center; +} + +.survey-title text { + display: inline-block; + background-color: #d3e2ff; + color: #3b7cff; + line-height: 58rpx; + padding: 0 30rpx; + border-radius: 0 0 20rpx 20rpx; + font-size: 28rpx; +} + +.survey-cont { + padding: 50rpx 0 20rpx; + box-sizing: border-box; +} + +.surveyTop { + position: relative; +} + +.surveyTop-img { + width: 210rpx; + height: 280rpx; + border-radius: 15rpx; +} + +.surveyTop-cont { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding-left: 300rpx; + padding-right: 20rpx; + box-sizing: border-box; + text-align: center; +} + +.surveyTop-cont-title { + margin-bottom: 40rpx; +} + +.surveyTop-title-name { + color: #3b7cff; + font-size: 40rpx; + line-height: 70rpx; +} + +.surveyTop-title-text { + color: #666666; +} + +.surveyTop-cont-item { + background-color: #edf3ff; + border-radius: 80rpx; + display: flex; + font-size: 28rpx; + padding: 20rpx 0; +} + +.surveyTop-item-label { + flex: 2; + text-align: center; + position: relative; +} + +.surveyTop-item-name { + margin-bottom: 10rpx; +} + +.surveyTop-item-label::after { + position: absolute; + content: ''; + right: 0; + top: 20%; + background-color: #c4d8ff; + width: 2rpx; + height: 60%; +} + +.surveyTop-item-label:last-child::after { + display: none; +} + +.surveyTop-item-text { + color: #666666; +} + +.surveyList { + margin-top: 30rpx; +} + +.surveyList-title { + font-size: 34rpx; + font-weight: 600; +} + +.surveyList-item { + margin-top: 20rpx; +} + +.surveyList-label { + line-height: 80rpx; + display: flex; +} + +.surveyList-label-name { + color: #111111; + width: 120rpx; +} + +.surveyList-label-thread { + width: calc(100% - 220rpx); + height: 20rpx; + margin-top: 30rpx; + background-color: #f5f5f5; +} + +.surveyList-label-bar { + height: 20rpx; + background-color: #f5f5f5; + position: relative; +} + +.surveyList-label-bar::before { + position: absolute; + content: ''; + height: 100%; + width: 100%; + color: #fff; + background-color: #2486ff; +} + +.surveyList-label-bar::after { + position: absolute; + content: ''; + width: 22rpx; + height: 22rpx; + border-radius: 50%; + background-color: #fff; + border: 4rpx solid #2486ff; + right: -22rpx; + top: -6rpx; +} + +.surveyList-label-number { + width: 100rpx; + text-align: right; +} + +/* 公共模块 */ +.module { + background-color: #ffffff; + margin-top: 40rpx; + border-radius: 15rpx; + overflow: hidden; +} + +.module-title { + background-image: linear-gradient(to top, #ffffff, #ecf2ff); + padding: 30rpx 0; + box-sizing: border-box; + font-weight: 600; + font-size: 32rpx; + position: relative; + padding-left: 60rpx; +} + +.module-title::after { + position: absolute; + content: ''; + left: 30rpx; + top: calc(50% - 13rpx); + background-color: #3d7eff; + width: 10rpx; + height: 26rpx; + border-radius: 160rpx; +} + +.module-check { + border: 2rpx solid #3d7eff; + width: 230rpx; + margin: 30rpx auto 0; + text-align: center; + height: 58rpx; + line-height: 58rpx; + border-radius: 90rpx; +} + +.module-check-img { + width: 32rpx; + height: 32rpx; + margin: -2rpx 10rpx 0 0; + display: inline-block; + vertical-align: middle; +} + +.module-check-name { + color: #3d7eff; + font-size: 28rpx; + display: inline-block; +} + +.moduleText { + background-color: #f7faff; + border-radius: 15rpx; + padding: 25rpx; + box-sizing: border-box; + display: flex; + margin-top: 40rpx; +} + +.moduleText-img { + width: 42rpx; + height: 42rpx; + margin-top: 10rpx; +} + +.moduleText-tips { + width: calc(100% - 42rpx); + padding-left: 20rpx; + box-sizing: border-box; + font-size: 28rpx; + line-height: 38rpx; + text-align: justify; +} + +.moduleText-tips text { + color: #3d7eff; +} + +.module-flex { + padding: 30rpx; + box-sizing: border-box; +} + +.module-flex-cont { + display: flex; +} + +.module-flex-item { + flex: 2; + text-align: center; +} + +.module-flex-img { + width: 100rpx; + height: 100rpx; +} + +.module-flex-name { + font-size: 26rpx; + color: #666666; + line-height: 48rpx; +} + +.module-flex-number { + font-weight: 600; +} + +/* 衰老分析 */ +.old { + padding: 30rpx; + box-sizing: border-box; +} + +.oldTop { + text-align: center; +} + +.oldTop-img { + width: 75%; +} + +.oldSee { + background-color: #f7faff; + border-radius: 15rpx; + padding: 15rpx; + box-sizing: border-box; + flex-wrap: wrap; + justify-content: flex-start; + margin-top: 40rpx; +} + +.oldSee-item { + width: 50%; + padding-left: 10rpx; + box-sizing: border-box; + display: inline-block; + line-height: 60rpx; + color: #111111; +} + +.oldSee-name { + position: relative; + padding-left: 20rpx; + font-size: 25rpx; +} + +.oldSee-name::after { + position: absolute; + content: ''; + left: 0; + top: calc(50% - 4rpx); + background-color: #3d7eff; + width: 8rpx; + height: 8rpx; +} + +/* 眼图 */ +.eye-img { + width: 60%; +} + +/* 毛孔 */ +.pore-flex { + padding-left: 20rpx; + width: calc(100% - 42rpx); +} + +.pore-flex-item { + font-size: 26rpx; + line-height: 52rpx; +} + +.pore-flex-item text { + font-weight: 600; + color: #3d7eff; +} + +/* 按钮 */ +.footer { + width: 100%; + height: 80px; + background-color: #FFFFFF; + position: fixed; + left: 0; + bottom: 0; + z-index: 9989; + padding: 20rpx 10rpx; + box-sizing: border-box; + display: block; +} + +.footer.active { + display: none; +} + +.footer-flex { + display: flex; +} + +.footer-flex-btn { + flex: 2; + margin: 0 15rpx; + line-height: 40px; + background-color: transparent; + height: 40px; + text-align: center; + color: #3b7cff; + border-radius: 80rpx; + border: 2rpx solid #3b7cff; +} + +.footer-flex-share { + background-color: #3b7cff; + color: #FFFFFF; +} + +/* 图片弹出 */ +.face-pop { + position: fixed; + left: 10%; + top: calc(50% - 300rpx); + z-index: 9999; + width: 80%; + overflow: hidden; + height: 640rpx; + text-align: center; + display: none; +} + +.face-pop.active { + display: block; +} + +.face-cont { + position: relative; + width: 396rpx; + height: 520rpx; + margin: 0 auto; + border-radius: 15rpx; + overflow: hidden; +} + +.face-img, +.face-ai { + position: absolute; + top: 0; + width: 100%; + height: 100%; +} + +.face-img { + left: 0; + z-index: 1000000; +} + +.face-ai { + right: 0; + z-index: 1000001; +} + +.face-back { + position: fixed; + left: 0; + top: 0; + z-index: 9998; + background-color: rgba(0, 0, 0, .5); + width: 100%; + height: 100vh; + display: none; +} + +.face-back.active { + display: block; +} + +.process_wrap { + height: 520rpx; + width: 4rpx; + position: absolute; + bottom: 0; + left: 0; + z-index: 1000003; +} + +.process_wrap .line { + position: absolute; + left: calc(50% + 2rpx); + top: 0; + width: 4rpx; + height: 100%; +} + +.process_wrap .line::before, +.process_wrap .line::after { + content: ""; + position: absolute; + width: 100%; + height: calc(50% - 28rpx); + background: #fff; + left: 0; +} + +.process_wrap .line::after { + top: 2rpx; +} + +.process_wrap .line::before { + bottom: -8rpx; +} + +.process_wrap .active_line { + position: absolute; + top: 0; + max-width: 8rpx; + height: 100%; +} + +.process_wrap .spot { + position: absolute; + top: calc(50% - 28rpx); + left: -28rpx; + width: 56rpx; + height: 56rpx; + border: 2px solid #ffffff; + border-radius: 100%; + background-color: transparent; +} + +.process_wrap .spot::before, +.process_wrap .spot::after { + content: ""; + position: absolute; + width: 0; + height: 0; + border-style: solid; + top: 50%; + margin-top: -4px; +} + +.process_wrap .spot::after { + border-width: 4px 0 4px 8px; + border-color: transparent transparent transparent #ffffff; + right: 2px; +} + +.process_wrap .spot::before { + left: 2px; + border-width: 4px 8px 4px 0; + border-color: transparent #ffffff transparent transparent; +} + +.surveyTop-close { + position: absolute; + width: 100%; + left: 0; + bottom: 0; + text-align: center; +} + +.surveyTop-close image { + width: 60rpx; + height: 60rpx; +} \ No newline at end of file diff --git a/pages/report/index.js b/pages/report/index.js new file mode 100644 index 0000000..5c4a1cf --- /dev/null +++ b/pages/report/index.js @@ -0,0 +1,118 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + userLogin : false, + listArr : [], // 商品列表 + page : {}, // 分页信息 + lodingStats : false, // 加载状态 + disabled : false, // 支付按钮 + payCode : '', // code获取openid + openId : '', // openid + payStatus : false, // 支付弹框 + catchtouchmove: false + }, + + onLoad(options) { + }, + + onShow() { + wx.login({ + success: res => { + this.setData({ + payCode: res.code + }) + // 获取openid + this.openInfo() + } + }) + + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + this.setData({ + userLogin: true, + disabled : false + }) + + // 获取检测结果列表 + this.aiInfo(); + } else { + this.setData({ + userLogin: false + }) + } + }, + + /** + * 检测结果列表 + */ + aiInfo (page){ + wx.$api.health.aiList({ + page: page || 1 + }).then(res => { + let listArr = this.data.listArr, + newData = [] + if(page == 1 || page == undefined) listArr = [] + newData = listArr.concat(res.data.data) + this.setData({ + listArr : newData, + page : res.data.page, + lodingStats : false + }) + wx.stopPullDownRefresh() + }).catch(err => { }) + }, + + /** + * openid + */ + openInfo() { + wx.$api.auth.codeOpenid({code: this.data.payCode}).then(res => { + this.setData({ + openId: res.data + }) + }).catch(err => {}) + }, + + /** + * 处理未登录时的转跳 + */ + assessGo(){ + if(wx.getStorageSync("token") != ''){ + wx.navigateTo({ + url: '/pages/index/assess/assess?code=' + this.data.openId + }) + }else{ + // 去登录 + wx.navigateTo({ + url: "/pages/login/index" + }) + } + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + // 获取检测结果列表 + this.aiInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取检测结果列表 + this.aiInfo(pageNumber); + } + } +}) diff --git a/pages/report/index.json b/pages/report/index.json new file mode 100644 index 0000000..58dc9d8 --- /dev/null +++ b/pages/report/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "报告" +} \ No newline at end of file diff --git a/pages/report/index.wxml b/pages/report/index.wxml new file mode 100644 index 0000000..1c02f7e --- /dev/null +++ b/pages/report/index.wxml @@ -0,0 +1,43 @@ + + + 检测报告 + + + {{item.create_at}} + 检测报告精准分析您皮肤问题 + 查看报告 + + + + 加载中... + + + 没有更多了~ + + + + + + 由于不同时间的生活习惯变化普遍较大 + 建议每年重新测试一次 + + 再次检测 + + + + + + 暂无报告数据 + 进行皮肤检测后,可查看报告数据 + 立即检测 + + + + + + + 暂不能查看数据 + 登录成功后,可查看报告数据 + 请先登录 + + \ No newline at end of file diff --git a/pages/report/index.wxss b/pages/report/index.wxss new file mode 100644 index 0000000..51d52f0 --- /dev/null +++ b/pages/report/index.wxss @@ -0,0 +1,104 @@ +page { + background-color: #f7faff; +} + + +/* 列表 */ +.report { + width: 100%; + padding: 30rpx 30rpx 0; + box-sizing: border-box; +} + +.report-title { + font-size: 36rpx; +} + +.report-list { + margin-top: 30rpx; +} + +.report-item { + background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + box-sizing: border-box; + box-shadow: 0 4rpx 30rpx 2rpx rgba(0, 0, 0, .05); + color: #0d0d0d; + position: relative; + margin-bottom: 30rpx; +} + +.report-item:last-child { + margin: 0; +} + +.report-time { + font-size: 34rpx; +} + +.report-tips { + font-size: 28rpx; + margin-top: 20rpx; + line-height: 60rpx; + color: #414141; +} + +.report-btn { + position: absolute; + right: 30rpx; + bottom: 30rpx; + color: #3b7cff; + border: #3b7cff 2rpx solid; + font-size: 26rpx; + line-height: 56rpx; + padding: 0 30rpx; + border-radius: 90rpx; +} + +/* 友情提示 */ +.report-point { + padding: 140rpx 50rpx 0; + box-sizing: border-box; + text-align: center; +} + +.report-point-text { + color: #999999; + line-height: 60rpx; +} + +.report-point-text text { + display: block; +} + +.report-point-btn { + margin-top: 50rpx; + background-color: #3b7cff; + display: inline-block; + color: #fff; + border-radius: 80rpx; + line-height: 90rpx; + width: 60%; +} + +/* 暂无数据 */ +.reportTips-title { + color: #000; + font-size: 34rpx; + line-height: 80rpx; +} + +.reportTips-text { + font-size: 26rpx; +} + +.reportTips-btn { + background-color: #3b7cff; + display: inline-block; + color: #fff; + line-height: 78rpx; + padding: 0 60rpx; + border-radius: 10rpx; + margin-top: 50rpx; +} diff --git a/pages/report/share/share.js b/pages/report/share/share.js new file mode 100644 index 0000000..cb73327 --- /dev/null +++ b/pages/report/share/share.js @@ -0,0 +1,193 @@ +// pages/report/share/share.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + barHeight : getApp().globalData.barHeight, // 状态栏高度 + userData : '', // 用户信息 + inviteCode : '', // 二维码 + + //海报 + canvas : '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + // 初始化画布 + wx.createSelectorQuery().select('#coverCanvas').fields({node: true, size: true}).exec(canvasNode => { + const canvas = canvasNode[0].node + canvas.width = 375 + canvas.height = 800 + this.setData({ + canvas + }) + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 小程序码 + this.ShareInfo(); + + // 获取用户信息 + this.userInfo(); + }, + + /** + * 小程序码 + */ + ShareInfo() { + wx.$api.user.miniShare({ + url: '/pages/index/index' + }).then(res => { + this.setData({ + inviteCode: res.data.qrcode + }) + }).catch(err => {}) + }, + + /** + * 用户信息 + */ + userInfo() { + wx.$api.user.userIndex().then(res => { + this.setData({ + userData : res.data + }) + }).catch(err => {}) + }, + + /** + * 生成海报 + */ + onCanvas(){ + wx.showLoading({ + title: '生成图片中...', + mask : true + }) + const canvas = this.data.canvas + const ctx = canvas.getContext('2d') + const codeImgEl = canvas.createImage() + const backBackEl = canvas.createImage() + + + codeImgEl.src = this.data.inviteCode //二维码 + backBackEl.src = 'https://cdn.shuiganying.com/images/2023/04/04/1b1781214a4b34bb37948d2adb86f142.png' //背景素材 + + const codeImgLoding = new Promise((resolve, reason) => { + codeImgEl.onload = () => { + resolve() + } + }) + const backBackLoding = new Promise((resolve, reason) => { + backBackEl.onload = () => { + resolve() + } + }) + Promise.all([codeImgLoding, backBackLoding]).then(() => { + // 绘制[背景] + ctx.drawImage(backBackEl, 0, 0, 375, 800) + + // 绘制[二维码] + ctx.drawImage(codeImgEl, 260, 650, 80, 80) + + // 文字 + ctx.font = "bold 20px Arial"; //字体大小 + ctx.fillStyle = "#3b7cff"; //字体颜色 + ctx.textAlign = "center" + ctx.fillText('水感应 | AI测肤', 190, 510); + + // 文字 + ctx.font = "15px Arial"; //字体大小 + ctx.fillStyle = "#000000"; //字体颜色 + ctx.textAlign = "center" + ctx.fillText('基于强大人脸算法,深度图像学习能力', 190, 543); + + // 文字 + ctx.font = "15px Arial"; //字体大小 + ctx.fillStyle = "#000000"; //字体颜色 + ctx.textAlign = "center" + ctx.fillText('准确分析皮肤状态,针对性发现皮肤问题', 188, 565); + + // 文字 + ctx.font = "14px Arial"; //字体大小 + ctx.fillStyle = "#666666"; //字体颜色 + ctx.textAlign = "center" + ctx.fillText('肤质、肤色、肤龄、皱纹、毛孔、黑头等~', 188, 595); + + // 文字 + ctx.font = "15px Arial"; //字体大小 + ctx.fillStyle = "#000000"; //字体颜色 + ctx.fillText('参与测试成为VIP立享VIP权益!', 145, 682); + + // 文字 + ctx.font = "15px Arial"; //字体大小 + ctx.fillStyle = "#000000"; //字体颜色 + ctx.fillText('活动火爆,先到先得哦~', 120, 713); + + wx.hideLoading() + wx.canvasToTempFilePath({ + canvas: this.data.canvas, + success : res => { + wx.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: saveRes => { + wx.showToast({ + title: '海报已保存至您的相册', + icon : 'none' + }) + this.setData({ + shareSee: false + }) + }, + fail: () => { + wx.hideLoading() + wx.showModal({ + title: '提示', + content: '暂未授权小程序写入您的相册,无法存储海报', + confirmColor: '#e50d01', + confirmText: '去设置', + success: res => { + if (res.confirm) { + wx.openSetting() + } + } + }) + } + }) + }, + }) + }).catch(err => { + wx.showToast({ + title: '图片加载失败', + icon : 'none' + }) + }) + }, + + /** + * 返回上一页 + */ + returnGo() { + wx.navigateBack({ + delta: 1 + }) + }, + + /** + * 微信分享 + */ + onShareAppMessage(){ + return { + title : this.data.userData.nickname + ':' + '邀请您一起AI测肤', + path : "/pages/index/index?invite=" + wx.getStorageSync("invite"), + imageUrl: "https://cdn.shuiganying.com/images/2023/04/04/382850bdd565b1a687e4547c5c4de0f7.png" + } + } +}) \ No newline at end of file diff --git a/pages/report/share/share.json b/pages/report/share/share.json new file mode 100644 index 0000000..f0f1934 --- /dev/null +++ b/pages/report/share/share.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom", + "navigationBarTextStyle": "white" +} \ No newline at end of file diff --git a/pages/report/share/share.wxml b/pages/report/share/share.wxml new file mode 100644 index 0000000..4e35278 --- /dev/null +++ b/pages/report/share/share.wxml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + 水感应 | AI测肤 + 基于强大人脸算法,深度图像学习能力,准确分析皮肤状态,针对性发现皮肤问题 + 肤质、肤色、肤龄、皱纹、毛孔、黑头等~ + + + + 参与测试成为VIP立享VIP权益! + 活动火爆,先到先得哦~ + + + + + + + + + + 保存海报 + + + + + \ No newline at end of file diff --git a/pages/report/share/share.wxss b/pages/report/share/share.wxss new file mode 100644 index 0000000..de16e0a --- /dev/null +++ b/pages/report/share/share.wxss @@ -0,0 +1,165 @@ +page { + background-color: #f7faff; +} + + +/* 返回 */ +.navigation{ + position: fixed; + top: 0; + left: 0; + z-index: 999; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: transparent; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + + +/* 顶部背景 */ +.top { + width: 100%; + position: relative; + height: 100vh; + overflow: hidden; +} + +.top-back { + position: absolute; + height: 100%; + left: 0; + top: 0; + width: 100%; + z-index: 1; +} + +/* 内容 */ +.seeCont { + position: absolute; + bottom: 0; + z-index: 100; + width: 100%; + padding: 60rpx 30rpx 120rpx; + box-sizing: border-box; +} + +.seeBorder { + border: 4rpx solid #ffffff; + border-radius: 15rpx; + overflow: hidden; + width: 100%; + box-sizing: border-box; +} + +.seeTop { + background-color: #ffffff; + opacity: .75; + padding: 30rpx 50rpx; + box-sizing: border-box; +} + +.seeTop-img { + text-align: center; +} + +.seeTop-img-title { + width: 78%; +} + +.seeTop-img-line { + width: 100%; + margin: 20rpx 0; +} + +.seeTop-cont { + text-align: center; + font-size: 28rpx; + border-bottom: 2rpx dashed #3b7cff; + padding-bottom: 40rpx; +} + +.seeTop-cont-name { + color: #3b7cff; + font-weight: 600; + font-size: 40rpx; +} + +.seeTop-cont-tips { + margin: 30rpx 0 15rpx; +} + +.seeTop-cont-tips text { + color: #3b7cff; +} + +.seeTop-cont-text { + color: #666666; +} + +.seeTop-share { + padding-top: 40rpx; + box-sizing: border-box; + display: flex; +} + +.seeTop-share-title { + font-size: 26rpx; + line-height: 58rpx; + flex: 1; +} + +.seeTop-share-code { + width: 110rpx; + height: 110rpx; + box-sizing: border-box; +} + +.seeTop-share-img { + width: 100%; + height: 100%; +} + +.seeBtn { + text-align: center; + width: 100%; + display: flex; + margin-top: 50rpx; +} + +.seeBtn-btn { + flex: 2; + background-color: #3d7eff; + display: inline-block; + color: #ffffff; + border-radius: 90rpx; + height: 90rpx !important; + line-height: 90rpx !important; + padding: 0 80rpx !important; + margin: 0 15rpx !important; + border: 2rpx solid #3d7eff; +} + +.seeBtn-btn-border { + background-color: #ffffff; + color: #3d7eff; + font-weight: normal; + width: auto !important; +} + +/* canvas */ +.canvas-img { + position: fixed; + left: -10000%; + top: 0; + z-index: 99; +} \ No newline at end of file diff --git a/pages/site/add/add.js b/pages/site/add/add.js new file mode 100644 index 0000000..b26ec86 --- /dev/null +++ b/pages/site/add/add.js @@ -0,0 +1,178 @@ +/* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + nameValue : '', // 姓名 + mobile : '', // 电话 + address : '', // 地址 + isDefault : '', // 默认地址 + // 省份选择 + areasArr : [], + areaId : 0, + areaIndex : 0, + + // 市级选择 + cityArr : [], + cityId : 0, + cityIndex : 0, + + // 区域选择 + regiArr : [], + regiId : 0, + regiIndex : 0, + + disabled : false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + experience: options.experience + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取省市区列表 + this.createInfo(); + }, + + /** + * 省市区列表 + */ + createInfo() { + wx.$api.site.create().then(res => { + let areas = res.data, + areaIndex = this.data.areaIndex + + this.setData({ + areasArr : areas, + areaId : areas[areaIndex].id, + }) + this.citylist(areas[areaIndex].id) + }).catch(err => {}) + }, + + /** + * 所在省份-下拉 + */ + areasChange(e) { + let area = this.data.areasArr, + index = e.detail.value, + atcode = area[index].id + if (index != this.data.areaIndex) { + this.setData({ + areaIndex : index, + areaId : atcode + }) + // 获取市级列表 + this.citylist(atcode) + } + }, + + /** + * 市级列表 + */ + citylist(cityId) { + wx.$api.site.create({ + parent_id: cityId + }).then(res=>{ + let cityArr = res.data + this.setData({ + cityId : cityArr[0].id, + cityIndex : 0, + cityArr : cityArr + }) + + // 获取区级列表 + this.regilist(cityArr[0].id) + }) + }, + + /** + * 市级下拉筛选 + */ + cityDrop(e) { + let city = this.data.cityArr, + index = e.detail.value, + citycode = city[index].id + if (index != this.data.cityIndex) { + this.setData({ + cityIndex : index, + cityId : citycode + }) + + // 获取市级列表 + this.regilist(citycode) + } + }, + + /** + * 区列表 + */ + regilist(areaId) { + wx.$api.site.create({ + parent_id: areaId + }).then(res=>{ + this.setData({ + regiArr : res.data, + regiId : res.data[0].id, + regiIndex : 0 + }) + }) + }, + + /** + * 区下拉筛选 + */ + regiDrop(e) { + let newIndex = e.detail.value + this.setData({ + regiIndex : newIndex, + regiId : this.data.regiArr[newIndex].id + }) + }, + + /* + 姓名截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value.substr(0,5) + }) + }, + + // 提交表单 + siteform(e) { + let value = e.detail.value + let data = { + name : this.data.nameValue, + mobile : value.mobile, + address : value.address, + province_id : this.data.areaId, + city_id : this.data.cityId, + district_id : this.data.regiId + } + this.setData({ + disabled: true + }) + wx.$api.site.siteAdd(data).then(res => { + wx.navigateBack() + }).catch(() =>{ + this.setData({ + disabled: false + }) + }) + } +}) \ No newline at end of file diff --git a/pages/site/add/add.json b/pages/site/add/add.json new file mode 100644 index 0000000..9b706f4 --- /dev/null +++ b/pages/site/add/add.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "新增地址" +} \ No newline at end of file diff --git a/pages/site/add/add.wxml b/pages/site/add/add.wxml new file mode 100644 index 0000000..7ef256d --- /dev/null +++ b/pages/site/add/add.wxml @@ -0,0 +1,44 @@ +
+ + + + + + + + + + + + + {{ areasArr[areaIndex].name }} + + + + + + + + + {{ cityArr[cityIndex].name }} + + + + + + + + + {{ regiArr[regiIndex].name }} + + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/site/add/add.wxss b/pages/site/add/add.wxss new file mode 100644 index 0000000..7dd5fea --- /dev/null +++ b/pages/site/add/add.wxss @@ -0,0 +1,79 @@ +.site-form { + background: white; + display: block; +} + +.site-input { + padding: 0 30rpx 0 200rpx; + position: relative; + line-height: 110rpx; + min-height: 110rpx; + border-bottom: 2rpx solid #f3f3f3; +} + +.site-input::before { + position: absolute; + bottom: 0; + left: 30rpx; + right: 0; + height: 1rpx; + content: ""; + background: #e4e6f2; +} + +.site-input:last-child::before { + display: none; +} + +.site-input label { + position: absolute; + left: 30rpx; + top: 0; +} + +.site-input input { + height: 110rpx; +} + +.site-input image { + width: 44rpx; + height: 44rpx; + position: absolute; + right: 20rpx; + top: calc(50% - 22rpx); +} + +.site-btn { + padding: 20rpx 30rpx; + margin-top: 100rpx; +} + +.site-btn button[size="mini"] { + width: 100%; + background: #3b7cff; + height: 88rpx; + line-height: 88rpx; + font-size: 30rpx; + color: white; + padding: 0; +} + +.site-btn button[disabled] { + background: #7789ff !important; + color: #fff !important; +} + +.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/site/edit/edit.js b/pages/site/edit/edit.js new file mode 100644 index 0000000..d7e585c --- /dev/null +++ b/pages/site/edit/edit.js @@ -0,0 +1,227 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + addressId : '', + nameValue : '', + mobile : '', + address : '', + isDefault : '', + disabled : false, + + //省份选择 + areas : [], + areaId : '', + areaIndex : 0, + + //市级选择 + cityList : [], + cityId : 0, + cityIndex : 0, + + //区域选择 + regiList : [], + regiId : 0, + regiIndex : 0, + }, + + onLoad(options) { + this.setData({ + addressId: options.addressid + }) + }, + + onShow() { + // 获取收货人信息 + this.getUserAddress() + }, + + /** + * 收货人信息 + */ + getUserAddress(){ + wx.$api.site.siteSee(this.data.addressId).then(res => { + let areasValue = res.data.provinces.findIndex(val=> val.name == res.data.province.name), + cityValue = res.data.cities.findIndex(val=> val.name == res.data.city.name), + regiValue = res.data.districts.findIndex(val=> val.name == res.data.district.name) + this.setData({ + nameValue : res.data.name, + mobile : res.data.mobile, + areas : res.data.provinces, + cityList : res.data.cities, + regiList : res.data.districts, + areaIndex : areasValue, + cityIndex : cityValue, + regiIndex : regiValue, + areaId : res.data.province.region_id, + cityId : res.data.city.region_id, + regiId : res.data.district.region_id, + address : res.data.address, + isDefault : res.data.default + }) + }).catch(err => {}) + }, + + /** + * 省市区列表 + */ + createInfo() { + wx.$api.site.create().then(res => { + let areas = res.data, + areaIndex = this.data.areaIndex + this.setData({ + areas : areas, + areaId : areas[areaIndex].id, + }) + + this.citylist(areas[areaIndex].id) + }).catch(err => {}) + }, + + /** + * 所在省份-下拉 + */ + areasChange(e) { + let area = this.data.areas, + index = e.detail.value, + atcode = area[index].id + if (index != this.data.areaIndex) { + this.setData({ + areaIndex : index, + areaId : atcode + }) + // 获取市级列表 + this.citylist(atcode) + } + }, + + /** + * 市级列表 + */ + citylist(cityId) { + wx.$api.site.create({ + parent_id: cityId + }).then(res=>{ + let cityArr = res.data + this.setData({ + cityId : cityArr[0].id, + cityIndex : 0, + cityList : cityArr + }) + + // 获取区级列表 + this.regilist(cityArr[0].id) + }) + }, + + /** + * 市级下拉筛选 + */ + cityDrop(e) { + let city = this.data.cityList, + index = e.detail.value, + citycode = city[index].id + if (index != this.data.cityIndex) { + this.setData({ + cityIndex : index, + cityId : citycode + }) + + // 获取区列表 + this.regilist(citycode) + } + }, + + /** + * 区列表 + */ + regilist(areaId) { + wx.$api.site.create({ + parent_id: areaId + }).then(res=>{ + this.setData({ + regiList : res.data, + regiId : res.data[0].id, + regiIndex : 0 + }) + }) + }, + + /** + * 区下拉筛选 + */ + regiDrop(e) { + let newIndex = e.detail.value + this.setData({ + regiIndex : newIndex, + regiId : this.data.regiList[newIndex].id + }) + }, + + /** + * 默认地址 + */ + addressDefault() { + wx.$api.site.siteDefault(this.data.addressId).then(res => { + this.setData({ + isDefault: !this.data.isDefault + }) + }).catch(err => {}) + }, + + /* + 姓名截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value.substr(0,5) + }) + }, + + /** + * 提交表单 + */ + siteform(e) { + let value = e.detail.value + let data = { + name : this.data.nameValue, + mobile : value.mobile, + address : value.address, + province_id : this.data.areaId, + city_id : this.data.cityId, + district_id : this.data.regiId, + is_default : this.data.isDefault + } + wx.$api.site.siteEdit(this.data.addressId, data).then(res => { + this.setData({ + disabled: true + }) + wx.navigateBack() + }).catch(err => {}) + }, + + + /** + * 删除地址 + */ + addressRemove(){ + wx.showModal({ + title : '提示', + content : '是否删除地址', + success : res=> { + if (res.confirm) { + wx.showLoading({ + title: '删除中', + }) + wx.$api.site.siteDel(this.data.addressId).then(res=>{ + wx.navigateBack() + }) + } + } + }) + }, + +}) diff --git a/pages/site/edit/edit.json b/pages/site/edit/edit.json new file mode 100644 index 0000000..9fb26d3 --- /dev/null +++ b/pages/site/edit/edit.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "编辑地址" +} \ No newline at end of file diff --git a/pages/site/edit/edit.wxml b/pages/site/edit/edit.wxml new file mode 100644 index 0000000..646c5ea --- /dev/null +++ b/pages/site/edit/edit.wxml @@ -0,0 +1,52 @@ +
+ + + + + + + + + + + + + {{ areas[areaIndex].name }} + + + + + + + + + {{ cityList[cityIndex].name }} + + + + + + + + + {{ regiList[regiIndex].name }} + + + + + + + + + + 设置默认地址 + + + + + 删除地址 + + + + +
\ No newline at end of file diff --git a/pages/site/edit/edit.wxss b/pages/site/edit/edit.wxss new file mode 100644 index 0000000..4a95a0d --- /dev/null +++ b/pages/site/edit/edit.wxss @@ -0,0 +1,99 @@ +.site-form { + background: white; + display: block; +} + +.site-input { + padding: 0 30rpx 0 200rpx; + position: relative; + line-height: 110rpx; + min-height: 110rpx; +} + +.site-input::before { + position: absolute; + bottom: 0; + left: 30rpx; + right: 0; + height: 1rpx; + content: ""; + background: #e4e6f2; +} + +.site-input:last-child::before { + display: none; +} + +.site-input label { + position: absolute; + left: 30rpx; + top: 0; +} + +.site-input input { + height: 110rpx; +} + +.site-input image { + width: 44rpx; + height: 44rpx; + position: absolute; + right: 20rpx; + top: calc(50% - 22rpx); +} + +.site-btn { + padding: 20rpx 30rpx; + margin-top: 100rpx; +} + +.site-btn button[size="mini"] { + width: 100%; + background: #3b7cff; + height: 88rpx; + line-height: 88rpx; + font-size: 30rpx; + color: white; + padding: 0; +} + +.site-btn button[disabled] { + background: #7789ff !important; + color: #fff !important; +} + +.site-switch { + font-size: 32rpx; + margin: 30rpx; + display: flex; + line-height: 40rpx; +} + +.site-switch text { + flex: 1; +} + +.site-switch-active { + color: #797979; +} + +.site-del { + width: 100%; + text-align: center; + margin-top: 40rpx; + padding-top: 60rpx; + border-top: 2rpx solid rgb(228, 230, 242); + color: #ff9951; +} + +.site-del-btn { + text-align: center; +} + +.site-del-img { + width: 46rpx; + height: 46rpx; + display: inline-block; + vertical-align: -10rpx; + margin-right: 5rpx; +} \ No newline at end of file diff --git a/pages/site/index.js b/pages/site/index.js new file mode 100644 index 0000000..915b5ce --- /dev/null +++ b/pages/site/index.js @@ -0,0 +1,76 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + type : '', //类型 + listArr : [] //收货地址 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + if(options) { + this.setData({ + type: options.type + }) + } + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取地址列表 + this.listInfo(); + }, + + /** + * 地址列表 + */ + listInfo (){ + wx.$api.site.siteList().then(res => { + this.setData({ + listArr: res.data + }) + }).catch(err => { }) + }, + + /** + * 选择地址 + */ + selectAddress(e){ + let atAdds = this.data.listArr[e.currentTarget.dataset.index] + let pages = getCurrentPages(), + prepage = pages[pages.length-2] + + if(this.data.type == 'goodsAddress') { + prepage.setData({ + address: atAdds, + addressId: atAdds.address_id + }) + wx.navigateBack() + return + } + prepage.setData({ + address: atAdds + }) + wx.navigateBack() + }, + + /** + * 编辑地址 + */ + addressEdit(e) { + wx.navigateTo({ + url: './edit/edit?addressid=' + e.currentTarget.dataset.id, + }) + }, +}) \ No newline at end of file diff --git a/pages/site/index.json b/pages/site/index.json new file mode 100644 index 0000000..f30802c --- /dev/null +++ b/pages/site/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "地址管理" +} \ No newline at end of file diff --git a/pages/site/index.wxml b/pages/site/index.wxml new file mode 100644 index 0000000..d31a91f --- /dev/null +++ b/pages/site/index.wxml @@ -0,0 +1,37 @@ + + + + + + + + + + + {{item.name}} + + + {{item.mobile}} + + + 默认 + + + {{item.full_address}} + + + + + + 选择地址 + + + + + + + 暂无收货地址 + + + 添加收货地址 + \ No newline at end of file diff --git a/pages/site/index.wxss b/pages/site/index.wxss new file mode 100644 index 0000000..d849a1e --- /dev/null +++ b/pages/site/index.wxss @@ -0,0 +1,116 @@ +page{ + background-color: #f4f4f6; +} + +.list { + border-bottom: 90px solid transparent; + padding: 30rpx; + box-sizing: border-box; +} + +.address { + background-color: #FFFFFF; + margin-bottom: 30rpx; + padding: 30rpx; + box-sizing: border-box; + border-radius: 10rpx; +} + +.address:last-child { + margin-bottom: 0; +} + +.address-top { + display: flex; +} + +.address-img { + background-color: #eeeeee; + border-radius: 50%; + width: 60rpx; + height: 60rpx; + padding: 10rpx; + box-sizing: border-box; + margin-top: 25rpx; +} + +.address-img image { + width: 100%; + height: 100%; +} + +.address-btn { + width: 40rpx; + height: 40rpx; + margin-top: 62rpx; +} + +.address-cont { + width: calc(100% - 102rpx); + padding: 0 30rpx; + box-sizing: border-box; +} + +.address-cont-title { + display: flex; + margin-bottom: 20rpx; + line-height: 44rpx; +} + +.address-cont-mobile { + margin: 0 20rpx; + color: rgb(104, 104, 104); +} + +.address-cont-default { + background-color: #ff9951; + color: #FFFFFF; + font-size: 24rpx; + border-radius: 40rpx; + padding: 0 15rpx; + height: 38rpx; + line-height: 38rpx; + margin-top: 2rpx; +} + +.address-cont-text { + line-height: 42rpx; + font-size: 28rpx; +} + +.select { + text-align: right; + padding-top: 30rpx; +} + +.select-btn { + border: 2rpx solid #ff9951; + color: #ff9951; + display: inline-block; + font-size: 28rpx; + padding: 0 30rpx; + line-height: 54rpx; + border-radius: 5rpx; +} + +/* 按钮 */ +.footer { + width: 100%; + height: 90px; + background-color: #FFFFFF; + position: fixed; + left: 0; + bottom: 0; + z-index: 9; + padding: 20px; + box-sizing: border-box; +} + +.btn { + line-height: 50px; + background-color: #3b7cff; + height: 100%; + text-align: center; + color: #FFFFFF; + border-radius: 10rpx; +} \ No newline at end of file diff --git a/pages/user/about/about.js b/pages/user/about/about.js new file mode 100644 index 0000000..e50f861 --- /dev/null +++ b/pages/user/about/about.js @@ -0,0 +1,28 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + barHeight : getApp().globalData.barHeight, // 状态栏高度 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + // 返回上一页 + returnGo() { + wx.navigateBack({ + delta: 1 + }) + }, +}) \ No newline at end of file diff --git a/pages/user/about/about.json b/pages/user/about/about.json new file mode 100644 index 0000000..f7efdab --- /dev/null +++ b/pages/user/about/about.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" + } \ No newline at end of file diff --git a/pages/user/about/about.wxml b/pages/user/about/about.wxml new file mode 100644 index 0000000..9bb3734 --- /dev/null +++ b/pages/user/about/about.wxml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/pages/user/about/about.wxss b/pages/user/about/about.wxss new file mode 100644 index 0000000..d22e6b7 --- /dev/null +++ b/pages/user/about/about.wxss @@ -0,0 +1,30 @@ +/* 返回上一页 */ +.navigation{ + position: fixed; + top: 0; + left: 0; + z-index: 99; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: transparent; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + +.about { + width: 100%; +} + +image { + width: 100%; + display: block; +} \ No newline at end of file diff --git a/pages/user/code/code.js b/pages/user/code/code.js new file mode 100644 index 0000000..e6bdfce --- /dev/null +++ b/pages/user/code/code.js @@ -0,0 +1,185 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + barHeight : getApp().globalData.barHeight, // 状态栏高度 + shareSee : false, //分享弹出 + inviteText : '', //邀请码 + inviteCode : '', //二维码 + + //海报 + canvas : '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + // 初始化画布 + wx.createSelectorQuery().select('#coverCanvas').fields({node: true, size: true}).exec(canvasNode => { + const canvas = canvasNode[0].node + canvas.width = 375 + canvas.height = 800 + this.setData({ + canvas + }) + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取信息 + this.inviteInfo(); + + // 小程序码 + this.ShareInfo(); + }, + + /** + * 获取信息 + */ + inviteInfo() { + wx.$api.user.invitesCode().then(res => { + this.setData({ + inviteText : res.data.invite + }) + }).catch(err => {}) + }, + + /** + * 小程序码 + */ + ShareInfo() { + wx.$api.user.miniShare({ + url: '/pages/index/index' + }).then(res => { + this.setData({ + inviteCode: res.data.qrcode + }) + }).catch(err => {}) + }, + + /** + * 生成海报 + */ + onCanvas(){ + wx.showLoading({ + title: '生成图片中...', + mask : true + }) + const canvas = this.data.canvas + const ctx = canvas.getContext('2d') + const codeImgEl = canvas.createImage() + const backBackEl = canvas.createImage() + + codeImgEl.src = this.data.inviteCode //二维码 + backBackEl.src = 'https://cdn.shuiganying.com/images/2023/03/31/30a1fde15c33efce2c182ef5fb7073fd.jpg' //背景素材 + const codeImgLoding = new Promise((resolve, reason) => { + codeImgEl.onload = () => { + resolve() + } + }) + const backBackLoding = new Promise((resolve, reason) => { + backBackEl.onload = () => { + resolve() + } + }) + Promise.all([codeImgLoding, backBackLoding]).then(() => { + ctx.drawImage(backBackEl, 0, 0, 375, 800) + // 绘制[二维码-白色背景] + ctx.fillStyle = "#ffffff"; + ctx.fillRect(30, 400, 130, 130); + + // 绘制[二维码-白色背景黑框] + ctx.strokeStyle = "#0e2c58"; + ctx.lineWidth = 2 + ctx.strokeRect(29, 399, 132, 132); + + // 绘制[二维码] + ctx.drawImage(codeImgEl, 40, 410, 110, 110) + + // 文字 + ctx.font = "bold 14px Arial"; //字体大小 + ctx.fillStyle = "#0e2c58"; //字体颜色 + ctx.textAlign = "center" + ctx.fillText('扫描二维码了解更多', 96, 560); + + wx.hideLoading() + wx.canvasToTempFilePath({ + canvas: this.data.canvas, + success : res => { + wx.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: saveRes => { + wx.showToast({ + title: '海报已保存至您的相册', + icon : 'none' + }) + this.setData({ + shareSee: false + }) + }, + fail: () => { + wx.hideLoading() + wx.showModal({ + title: '提示', + content: '暂未授权小程序写入您的相册,无法存储海报', + confirmColor: '#e50d01', + confirmText: '去设置', + success: res => { + if (res.confirm) { + wx.openSetting() + } + } + }) + } + }) + }, + }) + }).catch(err => { + wx.showToast({ + title: '图片加载失败', + icon : 'none' + }) + }) + }, + + /** + * 分享弹出 + */ + shareTap() { + this.setData({ + shareSee: !this.data.shareSee + }) + }, + + // 返回上一页 + returnGo() { + wx.navigateBack({ + delta: 1 + }) + }, + + /** + * 微信分享 + */ + onShareAppMessage(){ + this.setData({ + shareSee: false + }) + return { + title : '水感应修复、紧致、舒缓喷雾', + path : "/pages/index/index?invite=" + wx.getStorageSync("invite"), + imageUrl: "https://cdn.shuiganying.com/images/2023/04/04/9cd9968136e7efd85028fba69e4c587a.jpg" + } + } +}) \ No newline at end of file diff --git a/pages/user/code/code.json b/pages/user/code/code.json new file mode 100644 index 0000000..f7efdab --- /dev/null +++ b/pages/user/code/code.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" + } \ No newline at end of file diff --git a/pages/user/code/code.wxml b/pages/user/code/code.wxml new file mode 100644 index 0000000..4206743 --- /dev/null +++ b/pages/user/code/code.wxml @@ -0,0 +1,35 @@ + + + + + + + + + + + 扫描二维码了解更多 + + + + 分享 + + + + + + + + + + + + + 保存二维码 + + + 取消 + \ No newline at end of file diff --git a/pages/user/code/code.wxss b/pages/user/code/code.wxss new file mode 100644 index 0000000..6e9d51a --- /dev/null +++ b/pages/user/code/code.wxss @@ -0,0 +1,148 @@ +/* 返回上一页 */ +.navigation{ + position: fixed; + top: 0; + left: 0; + z-index: 99; + width: 100%; + height: 90rpx; + background-color: transparent; + transition: .2s; +} + +.navigation.active { + background-color: transparent; +} + +.navigation-arrow { + width: 44rpx; + height: 44rpx; + margin: 20rpx 15rpx 0 20rpx; +} + + +/* 二维码 */ +.code { + width: 100vw; + height: 100vh; + position: relative; +} + +.code-back { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.code-cont { + width: 400rpx; + position: absolute; + z-index: 9; + text-align: center; + left: 0; + bottom: 30%; +} + +.code-img{ + margin: 0 auto 20rpx; + overflow: hidden; + width: 260rpx; + height: 260rpx; + border: 4rpx solid #144592; + background-color: #ffffff; + padding: 10rpx; + box-sizing: border-box; +} + +.code-img image { + width: 100%; +} + +.code-text { + color: #144592; + font-size: 28rpx; + font-weight: 600; +} + +.code-share { + position: absolute; + z-index: 10; + left: 0; + bottom: 13%; + background: linear-gradient(to right, #3f7fff, #568fff); + width: 50rpx; + text-align: center; + border-radius: 0 26rpx 26rpx 0; + padding: 30rpx 15rpx 30rpx 12rpx; + box-shadow: 0 0 6rpx 6rpx rgba(0, 0, 0, .2); +} + +.code-share-name { + writing-mode:vertical-rl; + font-size: 30rpx; + padding-left: 4rpx; + color: #fff; +} + +.code-share image { + width: 36rpx; + height: 36rpx; + margin-bottom: 5rpx; +} + +.sharePop { + position: fixed; + width: 100%; + z-index: 99; + left: 0; + bottom: 0; + background-color: #0a1930; + display: none; +} + +.sharePop.active { + display: block; +} + +.shareCont-label image { + width: 60rpx; + height: 60rpx; + display: block; + margin: 0 auto 10rpx; +} + +.shareCancel { + border-top: 2rpx solid #0e2c58; + color: #ffffff; + width: 100%; + text-align: center; + line-height: 100rpx; +} + +.shareCont{ + display: flex; + padding: 30rpx 0; +} + +.shareCont-label { + color: #ffffff; + flex: 2; + text-align: center; + font-size: 28rpx; +} + +.codeShare-button { + background-color: transparent; + padding: 0; + font-weight: normal; +} + +/* canvas */ +.canvas-img { + position: fixed; + left: -10000%; + top: 0; + z-index: 99; +} \ No newline at end of file diff --git a/pages/user/help/help.js b/pages/user/help/help.js new file mode 100644 index 0000000..8c005e5 --- /dev/null +++ b/pages/user/help/help.js @@ -0,0 +1,51 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + helpsArr: [], //帮助列表 + }, + + onLoad(options) {}, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取帮助分类 + this.helpsNavInfo(); + }, + + /** + * 帮助分类 + */ + helpsNavInfo() { + wx.$api.user.helpsNav().then(res => { + let listArr = this.data.helpsArr, + newData = [] + for(let i of res.data){ + for(let j of i.children){ + j.isMore = false + } + } + newData = listArr.concat(res.data) + this.setData({ + helpsArr: newData + }) + }).catch(err => {}) + }, + + /** + * 文字展开 + */ + textMore(e){ + let childIndex = e.currentTarget.dataset.index, + parentIndex = e.currentTarget.dataset.parent + this.setData({ + [`helpsArr[${parentIndex}].children[${childIndex}].isMore`]: !this.data.helpsArr[parentIndex].children[childIndex].isMore + }); + } +}) + \ No newline at end of file diff --git a/pages/user/help/help.json b/pages/user/help/help.json new file mode 100644 index 0000000..379a486 --- /dev/null +++ b/pages/user/help/help.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "帮助中心" +} \ No newline at end of file diff --git a/pages/user/help/help.wxml b/pages/user/help/help.wxml new file mode 100644 index 0000000..f0c6cb4 --- /dev/null +++ b/pages/user/help/help.wxml @@ -0,0 +1,114 @@ + + {{item.title}} + + + + + {{items.title}} + + + + + + + + + \ No newline at end of file diff --git a/pages/user/help/help.wxss b/pages/user/help/help.wxss new file mode 100644 index 0000000..980fd3e --- /dev/null +++ b/pages/user/help/help.wxss @@ -0,0 +1,56 @@ +page { + background-color: #f4f4f6; +} + +.help-title { + font-size: 34rpx; + margin-bottom: 40rpx; +} + +.help { + padding: 40rpx 30rpx; + box-sizing: border-box; + background-color: #ffffff; + margin-top: 30rpx; +} + +.help-item-name { + margin-bottom: 40rpx; + display: flex; + position: relative; + line-height: 44rpx; +} + +.help-item:last-child .help-item-name { + margin-bottom: 0; +} + +.help-item-img { + width: 40rpx; + height: 40rpx; + margin-right: 10rpx; + margin-top: 2rpx; +} + +.help-item-arrow { + width: 44rpx; + height: 44rpx; + position: absolute; + right: 0; +} + +.help-item-title { + width: calc(100% - 94rpx); +} + +.help-item-text { + display: none; +} + +.help-item-text.active { + display: block; + margin-top: 30rpx; + line-height: 48rpx; + color: #747474; + font-size: 28rpx; +} \ No newline at end of file diff --git a/pages/user/index.js b/pages/user/index.js new file mode 100644 index 0000000..22e879c --- /dev/null +++ b/pages/user/index.js @@ -0,0 +1,140 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + data: { + userLogin : false, + userData : '', //用户信息 + ordersData : '', //订单数据 + // Progress : '', //商品数 + parentStatus: false //推荐人弹出 + }, + + onLoad(options) {}, + + onShow() { + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + this.setData({ + userLogin: true + }) + // 获取用户信息 + this.userInfo(); + return + } + + this.setData({ + userLogin: false + }) + }, + + /** + * 用户信息 + */ + userInfo() { + wx.$api.user.userIndex().then(res => { + this.setData({ + userData : res.data, + ordersData: res.data.count.orders, + Progress : res.data.count.progress + }) + if(res.data.invite != '') { + wx.setStorage({ + key : 'invite', + data : res.data.invite + }) + } + }).catch(err => {}) + }, + + /** + * 处理未登录时的转跳 + */ + userNav(e){ + let pageUrl = e.currentTarget.dataset.url + if(wx.getStorageSync("token") != ''){ + wx.navigateTo({ + url: pageUrl + }) + }else{ + // 去登录 + wx.navigateTo({ + url: "/pages/login/index" + }) + } + }, + + /** + * 复制订单号 + */ + copyUrl(val) { + wx.setClipboardData({ + data: val.currentTarget.dataset.no, + success: () => { + wx.showToast({ + title: "邀请码复制成功", + icon : "none" + }) + } + }) + }, + + /** + * 我的客服 + */ + callCenter() { + wx.openCustomerServiceChat({ + extInfo: {url: 'https://work.weixin.qq.com/kfid/kfcaf0d242864812bcb'}, + corpId: 'ww988d2bd112e71dd2', + success: res=> {}, + fail: err=> { + console.log(err) + } + }) + }, + + /** + * 退出登录 + */ + outLogin() { + wx.showModal({ + title : '提示', + content : '是否退出登录', + success : res=> { + if (res.confirm) { + getApp().globalData.inviteText = '' + + // 清理客户端登录缓存 + wx.removeStorageSync("token") + + // 清理邀请码 + wx.removeStorageSync("invite") + + this.setData({ + userLogin: false + }) + } + } + }) + }, + + /** + * 推荐人弹出 + */ + parentTap() { + this.setData({ + parentStatus: !this.data.parentStatus + }) + }, + + /** + * 拨打电话 + */ + clickcall(e){ + wx.makePhoneCall({ + phoneNumber: e.currentTarget.dataset.tel + }) + } +}) diff --git a/pages/user/index.json b/pages/user/index.json new file mode 100644 index 0000000..e546aa0 --- /dev/null +++ b/pages/user/index.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#5283ea", + "navigationBarTextStyle": "white", + "navigationBarTitleText": "我的" +} \ No newline at end of file diff --git a/pages/user/index.wxml b/pages/user/index.wxml new file mode 100644 index 0000000..042fd44 --- /dev/null +++ b/pages/user/index.wxml @@ -0,0 +1,182 @@ + + + + + + + + {{userData.identity.name}} + + + {{userData.nickname}} + + + + + + + + 购买产品{{Progress.now}} + 累计购买{{Progress.total}}瓶可成为创客 + + + + + + {{Progress.text}} + + + + 努力中 + + 经销商通道 + + + + + + + + + + 登录 / 注册 + + + + + + + + + + 我的订单 + 全部 + + + + + + 待付款 + + {{ordersData.init}} + + + + + 待发货 + + {{ordersData.paid}} + + + + + 待收货 + + {{ordersData.delivered}} + + + + + 已签收 + + + + + + + + + + 报告查看 + + + + 我的收藏 + + + + 我的点赞 + + + + 兑换券 + + + + 地址管理 + + + + 健康知识 + + + + 邀请好友 + + + + 推荐人 + + + + + + + + 常用工具 + + + + + + 我的邀请码 + + {{userData.invite}}复制 + + + + + + 用户设置 + + + + + 帮助中心 + + + + + 关于水感应 + + + + + 我的客服 + + + + + 退出登录 + + + + + + + + + + + + + + + + {{userData.parent.nickname}} + {{userData.parent.username}} + + \ No newline at end of file diff --git a/pages/user/index.wxss b/pages/user/index.wxss new file mode 100644 index 0000000..910f699 --- /dev/null +++ b/pages/user/index.wxss @@ -0,0 +1,451 @@ +page { + background-color: #f4f4f6; +} + +/* 头部 */ +.userTop { + background-color: #5283ea; + height: 380rpx; + position: relative; +} + +.userTop.active { + height: 320rpx; +} + +.userTop-url { + height: 190rpx; + position: relative; +} + +.userTop-back, +.userTop-cont { + position: absolute; + left: 0; + width: 100%; +} + +.userTop-back { + height: 100%; + bottom: 0; +} + +.userTop-cont { + padding: 40rpx 60rpx; + box-sizing: border-box; + display: flex; +} + +.userTop-head { + width: 110rpx; + height: 110rpx; + border: 4rpx solid #dae6ff; + background-color: #ffffff; + position: relative; + border-radius: 50%; +} + +.userTop-head image { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + border-radius: 50%; +} + +.userTop-name { + line-height: 110rpx; + color: #ffffff; + font-size: 38rpx; + padding-left: 40rpx; + box-sizing: border-box; + display: flex; +} + +.userTop-name-vip { + width: 140rpx; + margin-left: 20rpx; + margin-top: 38rpx; +} + +.userTop-head-vip{ + position: absolute; + bottom: -16rpx; + left: 18%; + font-size: 24rpx; + color: #ffffff; + height: 32rpx; + line-height: 32rpx; + width: 64%; + text-align: center; + border-radius: 80rpx; + background-image: linear-gradient(to right, #ffa340, #ff7707); +} + +.bar { + padding: 0 60rpx; + display: flex; +} + +.barTips { + display: flex; + line-height: 38rpx; + color: #ffffff; +} + +.barTips-center { + line-height: 54rpx; +} + +.barTips-name { + flex: 1; + font-size: 26rpx; +} + +.barTips-center .barTips-name { + font-weight: 600; + font-size: 28rpx; +} + +.barTips-name text { + font-weight: 600; + padding: 0 5rpx; +} + +.barTips-text { + font-size: 24rpx; + opacity: .8; +} + +.barCont { + width: calc(100% - 170rpx); +} + +.barBack { + width: 100%; + height: 6rpx; + position: relative; + border-radius: 200rpx; + margin-top: 15rpx; +} + +.barBack::after { + position: absolute; + content: ''; + left: 0; + top: 0; + height: 100%; + width: 100%; + background-color: #ffffff; + border-radius: 200rpx; + opacity: .5; +} + +.barBack text { + position: absolute; + content: ''; + left: 0; + top: 0; + height: 100%; + background-color: #ffffff; + border-radius: 100rpx; + opacity: 1; +} + +.barBtn { + background-color: #ffffff; + border-radius: 100rpx; + border: 2rpx solid #ffffff; + width: 120rpx; + text-align: center; + margin-left: 40rpx; + color: #5283ea; + font-size: 24rpx; + height: 54rpx; + line-height: 54rpx; +} + +.barBtn-active { + width: 180rpx; +} + +.barBtn.active { + opacity: .8; + color: #999; +} + +/* 主内容 */ +.userCont { + width: 100%; + position: absolute; + top: 285rpx; + padding: 0 30rpx 30rpx; + box-sizing: border-box; +} + +.userCont.active { + top: 210rpx; +} + +/* 订单 */ +.userOrder { + padding: 0 30rpx; + box-sizing: border-box; + width: 100%; +} + +.userOrder-cont { + padding: 30rpx 0; + box-sizing: border-box; + border-radius: 20rpx 20rpx 0 0; + background-image: linear-gradient(to top, #eef5ff 5%, #ffffff 90%); +} + +.userOrder-title { + display: flex; + margin-bottom: 30rpx; + line-height: 48rpx; + padding: 0 30rpx; +} + +.userOrder-title-name { + flex: 1; + font-size: 34rpx; +} + +.userOrder-title-more { + color: #a6a7ab; + font-size: 28rpx; + display: flex; +} + +.userOrder-title-arrow { + width: 42rpx; + height: 42rpx; + margin-top: 3rpx; +} + +.userOrder-list { + display: flex; +} + +.userOrder-item { + flex: 4; + text-align: center; + position: relative; +} +.userOrder-item-name { + font-size: 26rpx; + margin-top: 5rpx; + color: #868686; +} + +.userOrder-item-icon { + width: 42rpx; + height: 42rpx; +} + +.userOrder-item-number { + border-radius: 50%; + color: #ffffff; + background-color: #ff9951; + position: absolute; + top: -15rpx; + right: 40rpx; + font-size: 24rpx; + width: 30rpx; + height: 30rpx; + line-height: 30rpx; + border: 4rpx solid #ffffff; +} + +/* 入口 */ +.entry { + background-color: #ffffff; + border-radius: 0 0 20rpx 20rpx; + padding: 30rpx 0 0; + box-sizing: border-box; + flex-wrap: wrap; + justify-content: flex-start; + width: 100%; +} + +.entry-item { + width: 25%; + display: inline-block; + text-align: center; + font-size: 28rpx; + margin-bottom: 40rpx; +} + +.entry-item-img { + width: 56rpx; + height: 56rpx; + display: block; + margin: 0 auto 10rpx; +} + +.entry-item-name { + color: #313131; +} + +/* 常用工具 */ +.tool { + background-color: #ffffff; + border-radius: 20rpx; + padding: 30rpx 0 30rpx 30rpx; + box-sizing: border-box; + margin-top: 30rpx; +} + +.tool-title { + margin-bottom: 30rpx; + line-height: 48rpx; + font-size: 34rpx; +} + +.tool-list { + margin-top: 50rpx; +} + +.tool-item { + display: flex; + padding-bottom: 35rpx; + line-height: 48rpx; + margin-bottom: 35rpx; + border-bottom: 2rpx solid #e1e1e1; + position: relative; +} + +.tool-item.btn{ + background-color: transparent; + font-weight: normal; + width: 100% !important; + padding: 0 0 40rpx !important; +} + +.tool-item.btn::after{ + border: none; +} + +.tool-item:last-child { + border: none; + margin: 0; + padding-bottom: 15rpx; +} + +.tool-item-img { + width: 48rpx; + height: 48rpx; + margin-right: 20rpx; +} + +.tool-item-name { + color: #434343; +} + +.tool-item-arrow { + width: 48rpx; + height: 48rpx; + position: absolute; + right: 30rpx; +} + +.tool-item-code { + position: absolute; + right: 30rpx; + color: #ff9951; + font-size: 28rpx; + display: flex; +} + +.tool-item-copy { + height: 34rpx; + line-height: 34rpx; + border: 2rpx solid #ff9951; + padding: 0 15rpx; + border-radius: 5rpx; + margin-left: 15rpx; + font-size: 26rpx; + margin-top: 4rpx; +} + + +/* 推荐人弹出 */ +.parentEject { + position: fixed; + width: 100vw; + height: 100vh; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, .6); + z-index: 1000; + display: none; +} + +.parentEject.active{ + display: block; +} + +.parentPop { + width: 80%; + position: fixed; + left: 10%; + top: calc(50% - 200rpx); + z-index: 10001; + height: 400rpx; + display: none; + overflow: hidden; +} + +.parentPop.active{ + display: block; +} + +.parentPop-back, +.parentPop-cont { + height: 320rpx; + position: absolute; + left: 0; + top: 0; + border-radius: 40rpx; + width: 100%; +} + +.parentPop-cont { + padding: 60rpx; + box-sizing: border-box; +} + +.parentPop-close { + width: 50rpx; + left: calc(50% - 25rpx); + position: absolute; + bottom: 10rpx; +} + +.parentPop-img { + width: 220rpx; + position: absolute; + right: 40rpx; + top: 40rpx; +} + +.parentPop-head { + width: 94rpx; + height: 94rpx; + border-radius: 100%; + border: 4rpx solid #ffffff; +} + +.parentPop-nick { + margin: 10rpx 0 15rpx; + font-weight: 600; + color: #214b9b; + font-size: 32rpx; +} + +.parentPop-user { + color: #666666; +} \ No newline at end of file diff --git a/pages/user/setup/setup.js b/pages/user/setup/setup.js new file mode 100644 index 0000000..4b7deeb --- /dev/null +++ b/pages/user/setup/setup.js @@ -0,0 +1,154 @@ +// pages/user/setup/setup.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + userData : '', // 基础信息 + avatar : '', + nickName : '', + nameState : false, + disabled : false, + birthday : '', + sexArray : [ + { + id: 0, + name: '男' + }, + { + id: 1, + name: '女' + }, + ], + sexIndex : '', + reviseType: '', // 修改类型 + nameValue : '' // 限制5个字符 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + // 获取登录状态 + if(wx.getStorageSync("token") != ''){ + // 获取用户信息 + this.userInfo(); + } + }, + + /** + * 用户设置信息 + */ + userInfo() { + wx.$api.user.userSetup().then(res => { + this.setData({ + userData : res.data, + avatar : res.data.avatar, + nickName : res.data.nickname, + birthday : res.data.birthday, + sexIndex : res.data.sex + }) + }).catch(err => {}) + }, + + /** + * 头像上传 + */ + updImg(e){ + let type = e.currentTarget.dataset.type + this.setData({ + reviseType: e.currentTarget.dataset.type + }) + if(type == 'avatar') { + wx.chooseMedia({ + count : 1, + success : path => { + // 上传图片 + wx.$api.file.uploadImg(path.tempFiles[0].tempFilePath, {}).then(res=>{ + this.setData({ + avatar:res.url + }) + this.settingInfo(type, res.path) + }) + } + }) + return + } + + // 修改用户名 + this.setData({ + nameState: true + }) + }, + + /* + 姓名截取 + */ + bindinput(e) { + this.setData({ + nameValue: e.detail.value.substr(0,5) + }) + }, + + // 修改用户名 + freeform() { + this.settingInfo(this.data.reviseType, this.data.nameValue) + }, + + /* + 出生年月日 + */ + bindDateChange(e) { + this.setData({ + birthday: e.detail.value + }) + this.settingInfo('birthday', e.detail.value) + }, + + /* + 性别选择 + */ + radioChange (e) { + const sex = this.data.sexArray + for (let i = 0, len = sex.length; i < len; ++i) { + sex[i].checked = sex[i].id == e.detail.value + } + this.setData({ + sexArray: sex, + sexId : e.detail.value + }) + this.settingInfo('sex', e.detail.value) + }, + + /** + * 上传用户信息 + */ + settingInfo(key, value) { + wx.$api.user.setting(key, { + value: value + }).then(() => { + this.setData({ + nameState: false, + nameValue: '' + }) + // 获取用户信息 + this.userInfo(); + }).catch(err => {}) + }, + + // 关闭弹框 + establish() { + this.setData({ + nameState: false, + nameValue: '' + }) + } +}) \ No newline at end of file diff --git a/pages/user/setup/setup.json b/pages/user/setup/setup.json new file mode 100644 index 0000000..57e5f5a --- /dev/null +++ b/pages/user/setup/setup.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "用户设置" + } \ No newline at end of file diff --git a/pages/user/setup/setup.wxml b/pages/user/setup/setup.wxml new file mode 100644 index 0000000..aadfaf8 --- /dev/null +++ b/pages/user/setup/setup.wxml @@ -0,0 +1,86 @@ + + + + + 修改头像 + + + + + + + + + + 用户昵称 + + + {{nickName}} + + + + + + + + + + 真实姓名 + + + {{userData.name != '' ? userData.name : '填写真实姓名'}} + + + + + + + 出生年月 + + + + {{birthday != '' ? birthday : '请选择出生年月'}} + + + + + + + 年龄 + + + {{userData.age != '' ? userData.age : '-- '}}岁 + + + + + + 性别 + + + + + {{sexArray[sexIndex].name}} + + + + + + + + + + + + {{reviseType == 'nickname' ? '用户昵称' : '真实姓名'}} +
+ + + + + 暂不修改 + + +
+
+
\ No newline at end of file diff --git a/pages/user/setup/setup.wxss b/pages/user/setup/setup.wxss new file mode 100644 index 0000000..c308618 --- /dev/null +++ b/pages/user/setup/setup.wxss @@ -0,0 +1,173 @@ +page { + background-color: #f8f8f8; +} + +.setupItem { + margin-bottom: 30rpx; + background-color: #ffffff; +} + +.label { + line-height: 60rpx; + display: flex; + padding: 30rpx; + box-sizing: border-box; + border-bottom: 2rpx solid #f7f9fa; +} + +.label:last-child { + border: none; +} + +.label-name { + display: flex; + flex: 1; +} + +.label-name-img { + width: 34rpx; + height: 34rpx; + margin-top: 14rpx; + margin-right: 20rpx; +} + +.label-tips, +.entry { + display: flex; + color: rgb(110, 110, 110); +} + +.label-name-head { + width: 54rpx; + height: 54rpx; + border-radius: 50%; + margin-right: 20rpx; +} + +.label-name-nickName { + padding-right: 10rpx; + color: rgb(110, 110, 110); + font-size: 30rpx; +} + +.label-name-arrow { + width: 24rpx; + height: 24rpx; + margin-top: 18rpx; +} + +.label-name-number { + display: inline-block; + background-color: #f8f8f8; + color: #ffffff; + border-radius: 60rpx; + height: 36rpx; + line-height: 36rpx; + padding: 0 20rpx; + font-size: 28rpx; + margin: 12rpx 20rpx 0 0; +} + + +/* 弹出层提示 */ +.publicBack { + position: fixed; + width: 100vw; + height: 100vh; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, .5); + z-index: 99; +} + +.publicPop { + left: 50%; + top: 50%; + width: 240px; + margin-left: -120px; + margin-top: -340rpx; + position: fixed; + z-index: 100; +} + +.publicPop-cont { + width: 100%; + background-color: #FFFFFF; + border-radius: 30rpx; + text-align: center; + overflow: hidden; + padding: 50rpx 0 0; + box-sizing: border-box; +} + +.free-title { + font-weight: 600; + margin-bottom: 40rpx; + font-size: 34rpx; +} + +.free-input { + padding: 0 30rpx; + box-sizing: border-box; + height: 90rpx; + line-height: 90rpx; + font-size: 30rpx; +} + +.free-input input { + height: 90rpx; + border-radius: 10rpx; + background-color: #f8f8f8; +} + +.publicPop-text { + color: #9d9d9d; + font-size: 32rpx; + text-align: center; +} + +.publicPop-text text { + color: #000000; + font-size: 40rpx; + display: block; + font-weight: 600; + margin: 20rpx 0 10rpx; +} + +.publicPop-btn { + line-height: 80rpx; + margin-top: 70rpx; + font-size: 32rpx; + display: flex; + border-top: 2rpx solid #f8f8f8; +} + +.publicPop-btn button { + margin: 0 !important; + padding: 0 !important; + background-color: transparent; + font-weight: normal !important; + color: #6c78f8; +} + +.publicPop-btn-go { + width: 50% !important; + text-align: center; + height: 90rpx !important; + line-height: 90rpx !important; + font-size: 30rpx !important; +} + +.publicPop-btn-border { + position: relative; +} + +.publicPop-btn-border::after { + position: absolute; + content: ''; + right: 0; + top: 0; + width: 2rpx; + height: 100rpx; + background-color: #f8f8f8; +} \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..bfdbf9f --- /dev/null +++ b/project.config.json @@ -0,0 +1,55 @@ +{ + "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "bundle": false, + "userConfirmedBundleSwitch": false, + "urlCheck": true, + "scopeDataCheck": false, + "coverView": true, + "es6": true, + "postcss": true, + "compileHotReLoad": false, + "lazyloadPlaceholderEnable": false, + "preloadBackgroundData": false, + "minified": true, + "autoAudits": false, + "newFeature": false, + "uglifyFileName": false, + "uploadWithSourceMap": true, + "useIsolateContext": true, + "nodeModules": false, + "enhance": true, + "useMultiFrameRuntime": true, + "useApiHook": true, + "useApiHostProcess": true, + "showShadowRootInWxmlPanel": true, + "packNpmManually": false, + "enableEngineNative": false, + "packNpmRelationList": [], + "minifyWXSS": true, + "showES6CompileOption": false, + "minifyWXML": true, + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "useStaticServer": true, + "checkInvalidKey": true, + "disableUseStrict": false, + "useCompilerPlugins": false + }, + "compileType": "miniprogram", + "libVersion": "2.17.0", + "appid": "wx6bd4fcc040bfa025", + "projectname": "miniprogram-92", + "condition": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 4 + } +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..61dddb9 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,78 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "%E6%B0%B4%E6%84%9F%E5%BA%94", + "setting": { + "compileHotReLoad": true, + "urlCheck": false + }, + "condition": { + "miniprogram": { + "list": [ + { + "name": "", + "pathName": "pages/user/index", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/report/index", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/mall/index", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/index/assess/assess", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/report/share/share", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/login/personal/personal", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/mall/details/details", + "query": "id=2", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/health/article/article", + "query": "id=2", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/report/share/share", + "query": "", + "launchMode": "default", + "scene": null + } + ] + } + }, + "libVersion": "2.26.2" +} \ 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/icons/arrowWrite.png b/static/icons/arrowWrite.png new file mode 100644 index 0000000000000000000000000000000000000000..f05e62ac27f1786567a640276ebe413e565855f8 GIT binary patch literal 1949 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 L>gTe~DWM4f`(r_~ literal 0 HcmV?d00001 diff --git a/static/icons/goodsShare.png b/static/icons/goodsShare.png new file mode 100644 index 0000000000000000000000000000000000000000..213fc246066028edb378e6d3a473d659a7a412c4 GIT binary patch literal 571 zcmV-B0>u4^P)Px$^+`lQR9Hvtm$7S9K@i5jc?VZ%V+64lEJSTmm?mNnv{OkDh?RHj+$#cBHmTH3 zu(FYR%yKpwAxCUdrSh~ANtY^+K0+Y)7tF{?5?+pXw;S%lLAY&RvGeBp@$Js;EMdZf zCajN(3s4lro8WGq=l{QhMx_Jc=Pb)^0=OPqB31oSCE~sRWM(e_beVZ68Q@6#bxinp z-poF>TCJ7-coDe^;2VG&!yryMP!jJE(HAq@i-D->Zl34+RdMZh`+lufTL*A$5X30} z5!nE+2;dzvug1hv=0)TwfX@IfRYCLvdpw4O8_5Y(B}dmBJ%)#9*M81YPVjm_Zp4H-x$!y4irUkHOsPH09S};$vM}J ziI(R_2Jqg$H?vp$)}}&?17OR{9ud(!=iKj9;p4cG0Yv0asBFYOGeMdW<; zKx*Aj0a6`U1F%d)?40wd_NK&n@12dGGWF1Qn#jI#&~i9J-+ovQak^adLfz`!(9fPZ~`L@l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8JrcYhY+)U}j}%t^fr}K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4Kr@W=jf`}GDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf)UV33L4>=c`5nj z#hPFZzP?tTdBr7(dC94sF1AWQBlI#eQ>>g^EuD>B3`|WN4IB*(U0s|E4GrB4o!v|g zolGr&5-`0k`N^fZsd*(Zy(tL2W;peN(n4+l&}Ns^qRg_?6t|-MTm`V7tuk@D#Tch~ zP`xR*-C}}MuRhQ*`kD-&)M?TN+}1EgWYT& znND5xxx;Y&ZFs_xz&!~^c5-)0JgEF*#`w_4#Lam%qYJmqQiV8&5+Wxe{j7u%aoQ`v|v(x9KFteVf1O3hBRC{qBwyv#7!53k;d7PE>{R zo>lyy`zE&L+O{pqr=#yQJY6iYp>n2DiSJ(H2Rs(c=NiD&v^9S94b>mSf)C4OG~eCA zd*@;0pQ3}Gs-9ded@|#sR_rR(DVHNSErnID9GiLj*z4>b8{;Py2VQq_GFv|o`E!Ba z)NtPW&%5*=h3-FRV!dO|C#6ZVei{APwqd2Z?^6xmzv>bZ7Ek#jZeNP*Shi(dE8DI$ zxrLmCk{5-J8CI}38<-xMU^+o8e(BZX|5FRt{_SjxXJlij&^)M>*z>m@R1SK&`njxg HN@xNA=?nS< literal 0 HcmV?d00001 diff --git a/static/icons/homeWrite.png b/static/icons/homeWrite.png new file mode 100644 index 0000000000000000000000000000000000000000..f8745f0192567688a4f2015569e27ce97a15b4a0 GIT binary patch literal 1364 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
{jWR>zt1% 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
    c0P~IdE4? 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 z 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 literal 0 HcmV?d00001 diff --git a/static/icons/refresh_loding.gif b/static/icons/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$iZYwPx&07*naRA@u(nLm#XQ5431&nMsuSP7NHpMr#fghnDLiHZtgQBcu%x1pi&H@2dZ ztkQ}^V-pISP*@TbiS-5e1V`?gc{4lj%-lco&e%8Eo7`&7J?DAux%b?ApAi$@G~xJJ zCy-~*%r*hXf$hLlp*xf1LjMZ9l=N#H*>9BrGusUu&icVfKnuVd*Cl<596K~mB9H+; z2e>|tHVe$A5Q!#WW>3ZlyiDGaI3F`3Q3TBF9k4$pK!WXiNe4p51rso{pV`I?_1(s9 zS<>bZ2SEhP%tD-v+eVTXpVz?5J_9?)4KC2%lB8Wtwv7bLYz{aP7_2L^7m`laIj<$q zakYshTU(tf31oHtV{DX;?e|oj6Lkc-to5lpE3+^{AaeF+Bn`}L0Njj3mNIrE3snRh z5C_QHie)a6#0vO4Kt!1yNSY}Et0M3L*y~0A&!7w>BoirPayW~U_SF(Fvn{~)K=8R) z44|^@b>LQHyseUcj*poE+jbhktlSGf-A;8_WQd{FD?yHPm0*19b zl1XD3b@laOq(k2sPd^bJY3eFU7|8Ty<|d6cZmMC3cd|DbW+*VuzTCmi;q z%m~C}A!ft3u?>IJufZ(D$tw9Y^(5x{veGE_hDeKjin?VoUXj;JAX`q8EAAGSQ=cNQ zSJbV%O86FIPhxMQm|Mmew1kR-IzA)1{l!#RPVStT%%6OvY&arLAvhAD=H)IHf!Dx% z%HPSPJGTS^qy1xPLRW(%Ce0#6yd-NV?6ReA|>jb)()fk_D0r8r8KzYcg QumAu607*qoM6N<$f|rYcu>b%7 literal 0 HcmV?d00001 diff --git a/static/icons/reportColse_grey.png b/static/icons/reportColse_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..e104b801eebfff2ec77558323786f77f04da052c GIT binary patch literal 1584 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%*vS|5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8JrcYhY+)U}j}%t^fr}K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4Kr@W=jf`}GDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf)UV33L4>=c`5nj z#hPFZzP?tTdBr7(dC94sF1AWQBlI#eQ>=htZQx>IVd7$G>1Jr?3ZxtjoDEIQP25~f zOx;{9V0vBhlS^|`^GaZPQxJMhaq0!7h1>$5%`T}$nPsUdZbkXI3Sd85W#V>=5l-`< zdQ)(_#TchveV}9XK{1OI(=Z`m@&Pg7=@!U=r~K4BU~(@4rt7S%AUy^Krp2Bvjv*Dd z-bC4EOFIhKaz3sXlzihQFhz;c+;E8zhvrgeF2PF?T6boelqs*=s2yJR_%)A~Q;3%0 z0htmR1JMsG112ftXeBc7G}u4l?{!n2`rm1mEyE}Mi*JPPNtDSmIx}|c zI2pnqm@gC)p^>0`B!b~Yyp_s61s0{Kdn^rq_)XT^zCS%*VB_N$h7uy*FOe}&0j+Oc1>LBdF__aPY1<}yx#|0x$ITrnM#yeY8RaLe&FSB zaU;XkqFJ}AADlY)W2t*=*i0*l&CJg-R|8*4sXqcZfE~I8XWQHt&}u8TrZM1!;jzcrAc(d6t3cv`W*&7%iHf*Z#@5L;abhpeT5S(cs`{o?q1`x z{l7u_{eQf>*C^>O)#=)4<*oBAD|@k|c&YfJb?Z+2{?WbrlEY)3o&Al3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8JrcYhY+)U}j}%t^fr}K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4Kr@W=jf`}GDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf)UV33L4>=c`5nj z#hPFZzP?tTdBr7(dC94sF1AWQBlI#eQ>@&aEuAbJjm%6e-JA^#U0p1k-3;7ZEZmG- zjf@SAEsSA$UGkGlb5rw5V0u#!dd+d_1*L`D0-((cX8&XY>C>Yd`)c$gt|e`%Psl{xvdc3e@$!lNXo}mN>VSpYwx|od^Th{(>Umk31LJ zmh%O))?Ygu%;xa$`MLSdatvz^2eU}DE@um9Jzx4zlX1a^;P=^v>NXw9y~5@A)UnMi zAj)fjz!kCLV;o(lGdT<&F*OL7i#C0lwn?<<*Rp@=O@}vji5+BI;99^~;oM?(r&YjN zkAb7`s8Z6t2LXy~F$@BaPH--8irK;Vvd$@?2>>IWu0#L; literal 0 HcmV?d00001 diff --git a/static/icons/returnBlue.png b/static/icons/returnBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..b27d7e653b7bf6da325fd640d09c3e514b8d0e87 GIT binary patch literal 1308 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 Jp7i3?e*%zK6j=ZO literal 0 HcmV?d00001 diff --git a/static/icons/siteEdit.png b/static/icons/siteEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..5dfc56df6eef63aa6764cbdd262908e5621a981f GIT binary patch literal 1591 zcmaJ>X;2e)9NnOX41pq`Bc+q+vZ)7Xj@^WiY>DIqGa95Zm1tXSNLI3hWYf(;0$Mx( zCH6i}&JMzPk4Ozp^^SPzPHgP{Fj-I?A0G4H+K`yI2s z)Rg3qpr{}K077(&GzNNw{4a}1f6-)i3%$HeX-(8JVh!anlNg}166qMIbC@$Q17^17 zes%#%0Dvi6+-Raq`X#7^aPZB34BzW;(QE)nNc6hQ7CT0P=~xEtltY8f-$Nj7l|yN9 zdZFH>#%%baJQ7=$mtwT!*)1|Fl(-N~@S?PU1Eb8K*OBFPqh2{Qu8Y!p|Fr-D$03wm z4!tmC(x-xIg2cc$zJzCi#ZoX{#)lEjtO=4z>AdLi(HQBvX8$l6n8{q;G zx)9*JG~8(=Jnk5OZ6~Z^B%Xs=lSsk=ju!{TUt=InrbN_g+CSZSzj>8NC6OUgr9`Sh zv{J1an&4VrllTM|{$H+uHY4zN_CKATyrRd)zkNBk^x@^?V@`V9NqVjiUTkLoK)_+0 zMrri+{{C-)AgzK|0q$k)K(HXFP#@~XwWxU^y4{CM&DXXM+YfCR! zQzQ-7D;MB_U`{)``G?V}z*XNIQylE(4D7sG-T#rkf-z*v?v7ZscXQ?^!jZDw%$n7Y zj_iw`H@1G$$6KCN*E||6G72lEe#?|Ex94xFsvWueYuC+Lr(%m4(}t!s1^=x4s#{++ z2aoF>T#|fXe^+V$>tPZ6ApV-E*^RZ&gFoNFG7j&U+p+6$>1sut z?25gp_rvv_?GgEg%eD8n!5ltI_S4{ss+!>kh3|gJ%Xco8Gg_N0S)#LzbJO`tpD(t{_7_Gp}#ZxD^2Oy@_VQ9&z%hGYf>z~Y-;niR7QmE zL-wA%R?^d~Sf#Yr?KfQ6HuP*N^+il(Lr&W*V8zq4GOqb1(=;~RT6gz}ru_b~J;|9& jZs76R^)vrC4om^c$ulQRy6dz2zjB>6MRQE`>85`H682iw literal 0 HcmV?d00001 diff --git a/static/icons/siteIcon.png b/static/icons/siteIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..505ae38c97ec1d5ae96b7e6e15272a1c5c0a8e18 GIT binary patch literal 1411 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1|+TAxeoy;$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%*vS|5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8JrcYhY+)U}j}%t^fr}K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4Kr@W=jf`}GDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yY-;xWReF(0~F4nSMoLfxe-hfqrf-$X{U9#U(+h2xnkbT^v$bkg6Y) zTAW{6lnjiIG-a4(VA$ce2&53`8Y`Fli>0Nbn~Q<5rKyXBg^7ikBTTPnUU5lcUUDi-Zze*o6JEVm&PAz-CHX}m`T04p z*bB(WFUc>?$S+VZ0tSSFMtEjkN`857i-BUcMoXCNUivS0CsYeNfCI#WYL^n0!D? zc)A60;3+>f518DGfa&`2tu7Y^2F7omE{-7;x8BU~)^G`wIG%1Zi8nR5WfH5|CPT@S zPLZ1?eDaVG`L=nM^x|V4UehMoEX(kU)QF7qtGqJd&@mD2Zp~`3xX1OcR@^?j_qp}= zdDdqSh3`LW`@QDxvw79~s`q_N+Z^d{=hCR|zvx88LSv;l!Q8(Zrg<+Ev+=wpQp_a_HhV^2-n5#y$EqP+7}!fhKJWh32*HmrK8@A!)p z7k2P(5fqAho#oD8^1(^1%j<%pAg4gtW#j3-FV}6fy38!cVWcZEQOjvj>4!`sF|{+_ z16{m0J1>bPKX3VYRAi#L(;}(vjcJGe@OOE%O~?of=yjdAuw#S!Z&i;gEPjr2-$hB@ zU|Y*FQTkye%SR@?f47p_UOap6HOW3pEx@rxDqTcSOqyll{hzUuu9mXb1Z%&xt0-A` zWPfw&&Hj4}xRrz-god?*o~>*ZnyrxdJwb#yn@gqdK+omHNhfk*J10I^UZ>igesMcJ$}|SKJ=$cTG+wqUU(!|H+f@nP+X<`gl*+lP#S6 zlDl@q?iSj#cl}NE`E$RmKDcDE%f0{q-FZGLA7DtF8oF?f+KkDdV$svp&t;ucLK6T; CjRT7S literal 0 HcmV?d00001 diff --git a/static/icons/vipArrow.png b/static/icons/vipArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a8bfc58a7ad1c5d332bbdbdab178c2fac0a489 GIT binary patch literal 2109 zcmaJ?cT^L39uI`Ggd(T1AjJ(qU5=6pq(GFw&<#QoihyEB28fVMNCpzng*Wb>kaeT_U8RY9>p1k+$g%-;3x>H+B&^`eKom;|MSxf@F+U3AfP7(MTo34k zLZQt?ykIz(y`3R|#CX0MgI9{B2pffR+NPB91u-CujR2!W5+-h{r2~f*37NPcdp40R zbp@kEo=Gy0o8-$AB*h5mLfp2kSSKX|5fFngAFC9{O5_YB6Zc-1f$Y`S1RVA~1dd_i zJ|q>)_QSeDG7xKzcd!+Z>}Xgj9ZzzwBT^h}uw){MP9V|O&DD+K>gGTNh<5HIk{jRx*i&g#8bEO&x!ThJ z)-o4>1o2`}0xxrge{yMGP$o(Mh3+y)jD24*L-e^^Th8eD}#S~Ia*dr5t!#$n~Yp{UP9C6H4obJPit`T zfhN$8y6$t}j;hJFf#M94f-5e+T*VGorkVQ|rW$QvRfnZ4#HK9lPuXPYgXc@gb51)w zzYYlQm3kX-O}{dZajP>!IoEde=0p`_S^O^Tc$PDK*P^)N-i&g;IbSh_VzVt?Z#0~3xqkHd`dYYzh-tLrks%HHvdP8mCKv~Ub zMShb{CaWU|qa3dK1{c%P6kA=1J|TT@^kkp04$gQhiE{82D{-;wcIZ0)A`i@pq_uHN ziz#>ek|yi$unUEKCg+}GSk_NH0UVFKf@)UmiRfP`apuaUC%fBNzr1Naq}n^|`=hjU z*SUlq9=Q9t;Y@8G)xD%G+ekanJ>vVap^USSj#re}hRox*Y0^uNb^IAPK3~B}H$4B) z(NK^b`u7ax0rd2N*9Y8l)}n9UHZS&ysimOBo|ROS%N@Pzwe!~5oO}E*CJdvw!wtqlZi_!aCB*BVib;}6RD8y4eYFV~s?(~m+sCl# zC3MYj?AqpIe%@1yP4mNdavrVIv8w3?jH1gL>Jn4`x}xqyk;xiD*pBOxcYyypWo}5= zTv-U0Hj;kCaS_v5li-_^>=!?1THi=Em|H0EZ_4m!U*n*c(%KSIX&<0fdkhtOQS5QV z_V80q`Rn_?bym#si)?VupZY$ZbUcC?W&Dxq4ETj|t?hzkhAmHqHiUd@aHQiw ze%Cn{s$x2PI5DjJ^lb4o?vK_4%v#jE`QI2SGdX%9(N`}KN}-v~T-e{h>H0c(mk0MR z^*e#f+NJCb#XpbTQ?*|z?96N&?_W7?ftFllM@{~Fp*368$7^rRlBTMHu8o=|+cJ{S zH#H8gY24OgY@*XB%Gpv|59RmY84$!z#D@jw4>zHVCLfqy%=}?$;57U)d}p`x&}oN?pI>S7X2$9%SNwPS=RP`Eqg2Qp1G+~>wfqf&4ASmh z)NiJpT&3m~(RXMx17#*y4zcM@;m@l-`^*!S1c1BBB$k-e%vWyl7Q#a0HfH#tJ ilH(<}ycbe5R-kry>!s(KmItYS=w5EVK&8u`)c*oj$7E#y literal 0 HcmV?d00001 diff --git a/static/imgs/address.png b/static/imgs/address.png new file mode 100644 index 0000000000000000000000000000000000000000..7608b5ec09b5bce658399ec5391101f9fc4bd337 GIT binary patch literal 323 zcmV-J0lfZ+P)P)t-s|Ns9P z8UOQDRrU7x`Kzn(@&AmB|Niy$_?4CQc6M)X|6yVOL`45KHvjjEiuG!0-{1N4UtmyB z{w5~=m6rU6i2U{96C<*r+E}v%X zF9)n=nyMf+=Z>q*h~fShPjbm6k1QVpwrqQ@zWVd|Fr>U$7w2Y@OD=gN`D0uH_FmeN V8jfE2yKVpg002ovPDHLkV1i4)p349L literal 0 HcmV?d00001 diff --git a/static/imgs/cont_null.png b/static/imgs/cont_null.png new file mode 100644 index 0000000000000000000000000000000000000000..473d9165efbb6810d7905b7a9935f17ad0469628 GIT binary patch literal 14064 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 iA|fIpA|fK9x9u0?oWSW{tWV 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 literal 0 HcmV?d00001 diff --git a/static/report/shareLine.png b/static/report/shareLine.png new file mode 100644 index 0000000000000000000000000000000000000000..00ec9fb54353b062014e6b749e7e6874b264cbd0 GIT binary patch literal 857 zcmeAS@N?(olHy`uVBq!ia0y~yU`he9ML3v2WYNVmAk`J%6XFV_&khd2X(T5Abd7FF zkY6yvkKbIE*}e$96z6+TIsZ)J-ly-jty$`#cQe@2T&uG_L*dhrs7Wo-cB*+sGfV0_ z-kbyaFVNG)F(l*O+gm56EpiZOO)O**VV_fQM3DW!_xiodrnAgEe%mD_JScSMAF-r+V{ch+1zr-ma?NYDz~}!5*LBD~$-R7O|KAUP-`%s1 zUScf2*>K~Oh9eA#a;zgl}zUoGldnat-s1HT!b8XETTWl%0NK=9~0e+csDx z)$W>_&z&TlSv=#K_U)}3mM-w+l2*Ky7UlWo?$_%^N$$(;GE_@$VBYvA_C8aus;Ta^ zh?vWh4lyN_mLHw8d%@ZrvL@4#uZ7+0zHzoemhtoqGexsiQT>^IC*Rz?8ZB04n$vyA zEcLa)TK(MUq~b_vk+QIxT{pI@Gb~dyn|k+^m|5^m<_+D9w?oe|pOKf|AhLPFjo5U- zje2>`Nu^~!Kd?Q!R(sR$(za_iHfLogo&TSB_>iB};`#rI+LpHn7`|M4LT_I0`}vn$ zUtQfkmvQ%w`ELy;Z`VxFUV3sFOO5v3RJ-a2orl-t>YSHTVegQ#S2Zy>zD4AluMqpz zJ!d^-cBra-ZaTVK;ITU2=bMkOU3jB7O^E0DjEObh3ihc~n3lRQTpkv`{Ip?1`OZ`RvQ(P3*HQfC_Ky*5+F3Te>kZ@{z-)<7+B!9`1_0|63!9>(3(2Y+%^Xk~y{H;1=Bd-y7;;G39r*56e-Yx6s2h=Ap94&l44$rjF6*2UngBdS!|eb7 literal 0 HcmV?d00001 diff --git a/static/tabBarIcon/tabBar_00.png b/static/tabBarIcon/tabBar_00.png new file mode 100644 index 0000000000000000000000000000000000000000..16243a0c1b32a3430807732a7ee2a494c08892ae GIT binary patch literal 2285 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 Gdi}p_+aRX^ literal 0 HcmV?d00001 diff --git a/static/tabBarIcon/tabBar_02.png b/static/tabBarIcon/tabBar_02.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf5ac2f2a7c00f3d62f26f2ee4d19146bf8efbb GIT binary patch literal 1643 zcmaJ>3rrJt81H7?>I0PLhTwK-M`22PcP%aLN!8jbSfN;;Vkao{anK6AtG$C3<|D%q zK^sJ|N;cW1a}Uj63JQo5(gk%g+2#aci@JeP7K7k?;l_kr5pYY!F1h3E@H6^#te={tD|)4M8rr~`Fd{*-)XhcXa*y8nbW2>=3*3Jz;Z0Oj6HOwl?_-- zGWJ@L8dBR7nAx(j$d08JC25UCxkjmpy=*BE>qKY*D@N%7r!@~J5vPnj&Wq4{?={E< z#zUxF8T*+iomvAZ2s;Ld_+p+Bj+Ov1Qa&t>hJ@lMKmfr~5R!nfkO#pCBt}Frz{JC* zv)N7AND3M^k&8ab*k+2dAt2~*IQR}BpRnhEuvAKO2ta{=M@R6;LY&e&c{s_LWI!>} zXt&rX3xNY(M!kW^r(|qe>9Z27wkcYioM;o>Fwm*DfiNHPmNXftR{wvf)jAbTQYqMT zz5hu}Y71=`n1Yc+zTHR`WkVEpOivMZEkWc>c2Q#{D1tN-Hb6j20wUL1a1-Gm z-y8?1)rblwDLrn)RH%$iQ}8Vo6N17DI9jNPR-i&T3@cGN9H(3%5=#^!p;#EF5Km%J z!kBNxaB323dX5!Mi}iZJYNIownB7uu}rT;FfHE%)-=5q;j~zg76W=G z`;SRaUeWgPZl`=pAEum-;k4cDw6E8HwQmiB@!|~?D%U!H9;jYo4wQ%Oh~Uagm_APy zp&FDahk>2S?e>;foiwWR^tsuy)Q~U@!UTNS$9oW(|1nviZ;pp~pQeD5>?dKYs5fVbE+2toC{QNY;68&C!NJ!`Y_w zT8~V0;X>Ov?w@D4H@Z(QY~)IALwB*tFUJ79^W>wlPgqF;-u9(@*A=m*)8CIX?;Lp| zwyObgrEMs=*)SKcgMa7l`|vZR|3H00Y^^0d2^aarHRZ=C}%f)C`p+_4?&_5S`<$|SUQMON|OG-Pj{ literal 0 HcmV?d00001 diff --git a/static/tabBarIcon/tabBar_03.png b/static/tabBarIcon/tabBar_03.png new file mode 100644 index 0000000000000000000000000000000000000000..b460f2fe0b637c2d9cc872098656a01f20802b4d GIT binary patch literal 2580 zcmaJ@dpK148lI*ZQzkoNa_N*YDulTh*V%@QL6iHCODX2EFfp^n%rGON(H2T65_aNL zc4+DqH5>wPBmz*AZto6G*-}`>=_xrui_pA&bFE=$+ zJyi$yxM0O$aN9Ut=; zu!lfa8*==EL_wY&Bo@fUGFD=+5-wkfhCu8cC42@e3J{^0Km>pM=AS#bT_Ohy?`^ID(y>lEVULVPUR}Fc-%2L=1^J zPiXjsfeHv&0uEoq0eR>ZMg|j%6_GJYrJqXR^1ssZgrAQ|d0;pRgO4L%@hc^L3H0>* z|Djy&*Jz=L4*ae6e-aD*L3 zf_$`vQWDxYki%nxVxh@LfTt&k#uJJdJQhHsk}*mOEQiA;*-!~YJjL10nM!mb5L~Es z7S5K=)~Cwa{U#Qt6oXs2+5fufFI!6ctW3Z9R=N1M-KHid64P3ssJ}Gy;q*WHGQM+|cy;VKA0rDvEO{|>u zDq&)KKtiY0sd>Ga?Niq%sCjc{j$2Vq@aoRBC+|%(=^2CK$Bp`LsEQQI7$zr4@G7n&g1f$dJ`rhrrfQd zvPrBuMDoqjZ(98M67N#4zZCQ<(Vq=oidPht*Xqw!p5;2#Xf!*KllcBKBl5S6mk$Xpy(cG|agl|#n%QoclqAX1V>V3B414VW^&5=bhCZ-@K zTU!%!OeY=nhKLT&rp*V3iYuX^&Ced)&$hgI;YOmvSbKXv(U*r%`(d;~RT0-YsQu8PuOUbZYCScnC?4}Ldwol;-F|#=?q%Wfwt?ub zbqDA7sVq}8ZC_z8g=Skj*^aPCI-Tk^33Ym%W`1i|v{gch2Y)CiZ9kmV1s~3MA5VK% zeN5GCW=!^|-dG@A2=k45`pC^{P)$=TJFRaJdzF4|l^=X#SM+0eXvu--{JIkZdHTyI zH%P8x5>GOqH{1W}(~-s>c||Xu*tbsOj!R`6gl#e2&Cm&{{@qs>pZ64KN#W=2Ti8=WHs@58F+v+dS@5Nls+OTLomq{f zTkhHwO0VqhKl9*^+X`L8zptn7>P1x;HH_jBeHHMfKwC!ej%b6LEsDCp%y)OH{wP2= zYMS61OuK-!Q=1gMNB(^3Qtcixoe679-->LOoUiH~vYQy$qVBcMZGX|PuYFoqb(Yl& z=21H?txJh_u}zS1vGG6dJcaE>p7D|#PF*+vL)3L%b_sYtnQBP6<2u#h>!v&99;5#D zxB9!aS4bK+RP0KJ5Cb7Q1_a4#BK(THvGcu|M;lDZdk?-jGIx8;RDEnO6e;T^+@?D+ zZuwckM5~Lpw8{}ET}Ap|h0-%0UZ?+g?qb4^{!LIJQqk1%g3vWQL#koU{)>Of8R-?q zt1P~}oT=F>PTnn(wY}?)%Ywtfn3^=H@zITqHdYhV6Q-%ggZNDYNW;U^ZASwZHmf-O z-ZbFT{r=%HZbSG{M57HAHgMZ_ZEycCr^8~343f6S&v~7?c^4W=?_7}bnS?6S?(+P5 zR*V2)srtQiZLQJ8J=N|8JZw;NZAS7ypS!~ozQ3>9c$4}&6L&3WpNGsX+X1~8N^H@d zrED2}Tvjt(f?TY?RPTZ57nj$c_DRbkXN#nJDmV5R7LiNG_iWqWuS(Mk9k<<7Sr?JI zNTIo8!-uPno!5dkN(YbsB=M!gu^Q9*x!-H&)QxB%v$9K6oA+h>(sQC9A9n7=1+>ih zVJ0en0+wt_bKICyXK_CfBQIuVGEWb-brOS^>&jk_G_Cm5>%G*MG{YcxRr`z_ SU~BZse;Uoji+Y0+mhvAJ3QlDJ literal 0 HcmV?d00001 diff --git a/static/tabBarIcon/tabBar_selected_00.png b/static/tabBarIcon/tabBar_selected_00.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5c6914b9c52c7aa8add640738a78b74b864fd1 GIT binary patch literal 2923 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 JR7r@D{0&ZK-f#c_ literal 0 HcmV?d00001 diff --git a/static/tabBarIcon/tabBar_selected_01.png b/static/tabBarIcon/tabBar_selected_01.png new file mode 100644 index 0000000000000000000000000000000000000000..3aba0eec7d4d2427185cd2c88372e3f426db954b GIT binary patch literal 4255 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 literal 0 HcmV?d00001 diff --git a/static/tabBarIcon/tabBar_selected_02.png b/static/tabBarIcon/tabBar_selected_02.png new file mode 100644 index 0000000000000000000000000000000000000000..55cbdba3e740c0b71d3b5a93c5d625e94a27adcc GIT binary patch literal 2671 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 { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + + return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}` +} + +const formatNumber = n => { + n = n.toString() + return n[1] ? n : `0${n}` +} + +module.exports = { + formatTime +}