From 7ac96fd807fb62da6f7cf0b4cd2fc3abc3064ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=87?= Date: Wed, 26 Mar 2025 20:06:10 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=99=E6=80=81=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 29 ++ api/common.js | 5 + api/order.js | 17 ++ api/request.js | 92 ++++++ api/user.js | 9 + app.js | 32 +++ app.json | 46 +++ app.wxss | 415 ++++++++++++++++++++++++++++ assets/icon/eyes-close.png | Bin 0 -> 1906 bytes assets/icon/eyes-open.png | Bin 0 -> 2061 bytes assets/icon/fengkuai.png | Bin 0 -> 7385 bytes assets/icon/index/cash.png | Bin 0 -> 1649 bytes assets/icon/index/scan.png | Bin 0 -> 1252 bytes assets/icon/logo.png | Bin 0 -> 8469 bytes assets/icon/tab-bar/tab1-active.png | Bin 0 -> 859 bytes assets/icon/tab-bar/tab1.png | Bin 0 -> 764 bytes assets/icon/tab-bar/tab2-active.png | Bin 0 -> 896 bytes assets/icon/tab-bar/tab2.png | Bin 0 -> 1170 bytes assets/icon/tab-bar/tab3-active.png | Bin 0 -> 1468 bytes assets/icon/tab-bar/tab3.png | Bin 0 -> 1954 bytes assets/icon/user/agreement.png | Bin 0 -> 1257 bytes assets/icon/user/password.png | Bin 0 -> 865 bytes assets/icon/user/service.png | Bin 0 -> 1735 bytes assets/img/login-bg.png | Bin 0 -> 9294 bytes assets/style/svg-icon.wxss | 15 + package-lock.json | 36 +++ package.json | 16 ++ pages/index/index/index.js | 66 +++++ pages/index/index/index.json | 4 + pages/index/index/index.wxml | 33 +++ pages/index/index/index.wxss | 75 +++++ pages/order/list/index.js | 89 ++++++ pages/order/list/index.json | 8 + pages/order/list/index.wxml | 87 ++++++ pages/order/list/index.wxss | 286 +++++++++++++++++++ pages/product/list/index.js | 66 +++++ pages/product/list/index.json | 6 + pages/product/list/index.wxml | 53 ++++ pages/product/list/index.wxss | 73 +++++ pages/user/index/index.js | 66 +++++ pages/user/index/index.json | 4 + pages/user/index/index.wxml | 25 ++ pages/user/index/index.wxss | 51 ++++ pages/user/login/index.js | 137 +++++++++ pages/user/login/index.json | 4 + pages/user/login/index.wxml | 36 +++ pages/user/login/index.wxss | 95 +++++++ pages/user/password/index.js | 165 +++++++++++ pages/user/password/index.json | 4 + pages/user/password/index.wxml | 41 +++ pages/user/password/index.wxss | 15 + project.config.json | 41 +++ project.private.config.json | 23 ++ sitemap.json | 7 + utils/util.js | 95 +++++++ 55 files changed, 2367 insertions(+) create mode 100644 .gitignore create mode 100644 api/common.js create mode 100644 api/order.js create mode 100644 api/request.js create mode 100644 api/user.js create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 assets/icon/eyes-close.png create mode 100644 assets/icon/eyes-open.png create mode 100644 assets/icon/fengkuai.png create mode 100644 assets/icon/index/cash.png create mode 100644 assets/icon/index/scan.png create mode 100644 assets/icon/logo.png create mode 100644 assets/icon/tab-bar/tab1-active.png create mode 100644 assets/icon/tab-bar/tab1.png create mode 100644 assets/icon/tab-bar/tab2-active.png create mode 100644 assets/icon/tab-bar/tab2.png create mode 100644 assets/icon/tab-bar/tab3-active.png create mode 100644 assets/icon/tab-bar/tab3.png create mode 100644 assets/icon/user/agreement.png create mode 100644 assets/icon/user/password.png create mode 100644 assets/icon/user/service.png create mode 100644 assets/img/login-bg.png create mode 100644 assets/style/svg-icon.wxss create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages/index/index/index.js create mode 100644 pages/index/index/index.json create mode 100644 pages/index/index/index.wxml create mode 100644 pages/index/index/index.wxss create mode 100644 pages/order/list/index.js create mode 100644 pages/order/list/index.json create mode 100644 pages/order/list/index.wxml create mode 100644 pages/order/list/index.wxss create mode 100644 pages/product/list/index.js create mode 100644 pages/product/list/index.json create mode 100644 pages/product/list/index.wxml create mode 100644 pages/product/list/index.wxss create mode 100644 pages/user/index/index.js create mode 100644 pages/user/index/index.json create mode 100644 pages/user/index/index.wxml create mode 100644 pages/user/index/index.wxss create mode 100644 pages/user/login/index.js create mode 100644 pages/user/login/index.json create mode 100644 pages/user/login/index.wxml create mode 100644 pages/user/login/index.wxss create mode 100644 pages/user/password/index.js create mode 100644 pages/user/password/index.json create mode 100644 pages/user/password/index.wxml create mode 100644 pages/user/password/index.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 sitemap.json create mode 100644 utils/util.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1006f0a --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +miniprogram_npm +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/api/common.js b/api/common.js new file mode 100644 index 0000000..e7c58b9 --- /dev/null +++ b/api/common.js @@ -0,0 +1,5 @@ +import request from './request'; + +export default { + getConfig:()=>request.get('/api/config') +} \ No newline at end of file diff --git a/api/order.js b/api/order.js new file mode 100644 index 0000000..fdc2143 --- /dev/null +++ b/api/order.js @@ -0,0 +1,17 @@ +import request from './request'; + +export default { + status:{ + created:"CREATED",pending:"PENDING", + delivering:"DELIVERING",pickupReady:"PICKUP_READY",completed:"COMPLETED", + cancelled:"CANCELLED",refunding:"REFUNDING",refunded:"REFUNDED" + }, + statusKV:{ + CREATED:'待支付',PENDING:'待接单',DELIVERING:'待配送',PICKUP_READY:'待自提', + COMPLETED:'已完成',CANCELLED:'已取消',REFUNDING:'退款中',REFUNDED:'已退款' + }, + + list:(params)=>request.get('/api/merchant/order/merchant',params), + + test:(data)=>request.post('/api/merchant',data) +} \ No newline at end of file diff --git a/api/request.js b/api/request.js new file mode 100644 index 0000000..f74b9dd --- /dev/null +++ b/api/request.js @@ -0,0 +1,92 @@ +const { miniProgram } = wx.getAccountInfoSync(); +const envVersion = miniProgram.envVersion; +let baseUrl = ''; +if(envVersion=='develop'){ + baseUrl = 'https://api-dev.beefast.co'; +}else{ + baseUrl = 'https://api.beefast.co' +} +let app = getApp(); +let navLoginPromise = null; + + +const sendRequest = (options)=>{ + if(!app)app = getApp(); + return new Promise((rs,rj)=>{ + wx.request({ + url: `${baseUrl}${options.url}`, + success:(result)=>{ + //Http Request的状态 + if(result.statusCode==200){ + //后端的自定义状态 + if(result.data.code==200){ + rs(result.data.data); + }else{ + if(!options.options.noTips){ + wx.showToast({ + icon:'error', + title: result.data.message, + }); + } + rj(result.data); + } + }else if(result.statusCode==401){ + const pages = getCurrentPages(); + const currentPages = pages[pages.length-1]; + + if(navLoginPromise){ + return; + } + if(currentPages&¤tPages.route.indexOf('pages/login')>-1){ + //用户先打开了小程序,然后又点开了朋友的分享页 + navLoginPromise = wx.redirectTo({ + url: '/pages/user/login/index', + }); + return; + } + navLoginPromise = wx.navigateTo({ + url: '/pages/user/login/index', + }); + navLoginPromise.then(()=>{ + navLoginPromise = null; + }) + }else{ + wx.showToast({ + icon:'error', + title: result.data.message||result.data.detail||'发生错误', + }) + rj(result.data); + } + }, + + method:options.method, + data:options.data, + header:{ + Authorization: `Bearer ${app?.globalData?.accessToken}` + }, + fail:(res)=>{ + wx.showToast({ + icon:'error', + title: 'Request Error', + }) + rj(res); + } + }) + }) +} + +export default { + baseUrl:baseUrl, + get(url,data,options){ + return sendRequest({url,method:'get',data,options:options||{}}); + }, + post(url,data,options){ + return sendRequest({url,method:'post',data,options:options||{}}); + }, + put(url,data,options){ + return sendRequest({url,method:'put',data,options:options||{}}); + }, + delete(url,data,options){ + return sendRequest({url,method:'delete',data,options:options||{}}); + } +} \ No newline at end of file diff --git a/api/user.js b/api/user.js new file mode 100644 index 0000000..9e076ba --- /dev/null +++ b/api/user.js @@ -0,0 +1,9 @@ +import request from './request'; + +export default { + genderKV:{ + MALE:'先生',FEMALE:'女士' + }, + login:(phone,password)=>request.post('/api/user/password-login',{phone,password,role:'deliveryman'}), + verifyCode:(phone)=>request.post('/api/user/send-code',{phone}), +} \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..2d88890 --- /dev/null +++ b/app.js @@ -0,0 +1,32 @@ +import commonApi from './api/common'; +const token = wx.getStorageSync('accessToken'); + +App({ + onLaunch() { + // 展示本地存储能力 + const logs = wx.getStorageSync('logs') || [] + logs.unshift(Date.now()) + wx.setStorageSync('logs', logs) + + // 登录 + wx.login({ + success: res => { + // 发送 res.code 到后台换取 openId, sessionKey, unionId + } + }) + }, + async getAppConfig(){ + if(!this.globalData.appConfig){ + const data = await commonApi.getConfig(); + this.globalData.appConfig = {}; + data.map((item)=>{ + this.globalData.appConfig[item.key] = item.value; + }) + } + return this.globalData.appConfig; + }, + globalData: { + userInfo: null, + accessToken:token + } +}) diff --git a/app.json b/app.json new file mode 100644 index 0000000..7fd1b1f --- /dev/null +++ b/app.json @@ -0,0 +1,46 @@ +{ + "pages": [ + "pages/order/list/index", + "pages/index/index/index", + "pages/user/index/index", + "pages/user/login/index", + "pages/user/password/index", + "pages/product/list/index" + ], + "window": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "", + "navigationBarBackgroundColor": "#ffffff", + "backgroundColor": "#f5f5f5" + }, + "style": "v2", + "tabBar": { + "color": "#222222", + "selectedColor": "#FFC300", + "backgroundColor": "#ffffff", + "borderStyle": "black", + "list": [ + { + "pagePath": "pages/index/index/index", + "text": "数据", + "iconPath": "assets/icon/tab-bar/tab1.png", + "selectedIconPath": "assets/icon/tab-bar/tab1-active.png" + }, + { + "pagePath": "pages/order/list/index", + "text": "订单", + "iconPath": "assets/icon/tab-bar/tab2.png", + "selectedIconPath": "assets/icon/tab-bar/tab2-active.png" + }, + { + "pagePath": "pages/user/index/index", + "text": "我的", + "iconPath": "assets/icon/tab-bar/tab3.png", + "selectedIconPath": "assets/icon/tab-bar/tab3-active.png" + } + ] + }, + "componentFramework": "glass-easel", + "sitemapLocation": "sitemap.json", + "lazyCodeLoading": "requiredComponents" +} \ No newline at end of file diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..61e55f6 --- /dev/null +++ b/app.wxss @@ -0,0 +1,415 @@ +@import './assets/style/svg-icon.wxss'; +page{ + font-size:30rpx; + line-height: 1; + --main-font-color:#000000; + --main-bgclolor:#F5F5F5; + --main-color:#FEC400; + --main-hover-color:#fcce39; + + --safe-bottom:constant(safe-area-inset-bottom); + --safe-bottom:env(safe-area-inset-bottom); + color:var(--main-font-color); + background-color:var(--main-bgclolor); + overflow: hidden; + min-height: 100vh; + box-sizing: border-box; +} +view::-webkit-scrollbar{ + display: none; +} +button{ + border-radius: 12rpx; + box-sizing: border-box; +} +button label{ + display: inline-block; + margin-left: 10rpx; +} +button .icon,button label{ + vertical-align: middle; +} +button:not([size=mini]){ + width:auto; + padding:30rpx 25rpx; + font-size: 36rpx; +} +button:not([size=mini]) .icon{ + width:32rpx;height:32rpx; +} + +button[type=primary]{ + background-color:var(--main-color); + color:var(--main-font-color); +} +button[disabled]{ + opacity: .7; +} +button[type=primary]:not([disabled]).button-hover{ + background-color: var(--main-hover-color); + color:var(--main-font-color); +} + +button[plain]{ + border: 1rpx solid rgba(255, 195, 0, 0.5); + color: #FFC300; +} + +button[type=default]{ + color:var(--main-font-color); + font-size:32rpx; + line-height: 1; +} +button[type=default].button-hover{ + color:#666; +} + +button[type=primary][plain]{ + border-color: var(--main-color); + color:var(--main-color); + padding:28rpx 25rpx; +} + +button[loading][type=primary] { + background-color:var(--main-color); + color: hsla(0,0%,100%,.6); +} + +radio-group{ + line-height: 34rpx; +} +radio-group radio{ + display: inline-block; + vertical-align: middle; + overflow: hidden; +} +radio-group label{ + display: inline-block; + vertical-align: middle; +} + +radio-group radio+label{ + margin-left:10rpx; +} +radio-group label+label{ + margin-left:20rpx; +} + +radio{ + width: 17px; + height: 17px; + position: relative; +} +radio .wx-radio-input{ + border-radius: 50%; + border-color:var(--main-color); + box-sizing: border-box; + width: 100%; + height: 100%; + position: absolute; + top: 0;left:0; +} +radio .wx-radio-input.wx-radio-input-checked{ + background-color:transparent; + border-color: var(--main-color); +} +radio .wx-radio-input.wx-radio-input-checked::after{ + content: ''; + position: absolute; + width: 11px; + height:11px; + left:2px;top:2px; + border-radius: 50%; + background: var(--main-color); + transform: none; + -webkit-transform:none; +} +checkbox .wx-checkbox-input{ + width: 40rpx; + height: 40rpx; + border-radius: 50%; +} + +page-container .content{ + border-radius: 24rpx 24rpx 0 0; + background-color: #F5F5F5; + min-height: 200rpx; + /* padding:20rpx; */ +} + +.page-container{ + background-color: #fff; + border-radius: 20rpx; + padding:30rpx; + margin:20rpx; +} +.page-container.shadow,.cells.shadow{ + box-shadow: 0px 6px 6px 1px rgba(0, 0, 0, 0.05); +} + + +.tags{ + display: flex; + gap: 10rpx; +} +.tags .tag{ + font-size:20rpx; + padding:6rpx 10rpx; + color: #888888; + border: 0.5px solid rgba(153, 153, 153, 0.5); + border-radius: 6rpx; +} +.tags .tag.yellow{ + color: #FFC300; + border-color:#FFC300; +} +.spliter{ + border-bottom: 1rpx solid rgba(153, 153, 153, 0.2); +} +.spliter.dashed{ + border-bottom: 1rpx dashed rgba(153, 153, 153, 0.2); +} +.money,.money-promation,.money-normal,.money-disable{ + font-size: 36rpx; + font-weight: 500; +} +.money::before,.money-promation::before,.money-normal::before,.money-disable::before{ + content: "¥ "; + font-size: 80%; +} +.money.minus::before{ + content: '- ¥'; +} +.money{ + color:#ff0000; +} +.money-promation{ + color:#FF8400; +} +.money-yellow{ + color:var(--main-color); +} +.money-blue{ + color:#1A4DEB; +} +.money-promation::before{ + content: "-¥ "; +} +.money-normal{ + color:unset; +} +.money-disable{ + color:#888888; + text-decoration: line-through; + font-size: 28rpx; + font-weight:normal; +} + +.bottom-bar{ + padding:24rpx; + position:fixed; + bottom:0; + left:0;right:0; + background-color: #fff; + border-top: 0.5px solid rgba(153, 153, 153, 0.2); + padding-bottom:calc(constant(safe-area-inset-bottom) + 24rpx); + padding-bottom:calc(env(safe-area-inset-bottom) + 24rpx); +} +.bottom-bar.float,.bottom-bar-v2.float{ + padding:0; + border:0; + margin: 0 24rpx; + margin-bottom:calc(constant(safe-area-inset-bottom) + 24rpx); + margin-bottom:calc(env(safe-area-inset-bottom) + 24rpx); +} +.custom-scroll-view{ + height:100vh; + display: flex; + flex-direction: column; +} +.custom-scroll-view .main{ + flex:1; + overflow: hidden; +} +.bottom-bar-v2{ + padding:24rpx; + background-color: #fff; + border-top: 0.5px solid rgba(153, 153, 153, 0.2); + padding-bottom:calc(constant(safe-area-inset-bottom) + 24rpx); + padding-bottom:calc(env(safe-area-inset-bottom) + 24rpx); +} + +.cells{ + margin:20rpx; + border-radius: 24rpx; + background-color: #fff; + overflow: hidden; +} +.cells .cell{ + display: flex; + align-items: center; + padding:0 40rpx; + font-size: 30rpx; + position: relative; +} +.cells .cell.cell-active{ + background-color:rgba(0,0,0,.1); +} +.cells .cell::after{ + content: ''; + border-bottom: 1.2rpx solid rgba(153, 153, 153, 0.1); + position: absolute; + bottom:0; + left:40rpx; + right:40rpx; +} +.cells .cell:last-child::after,.cells .cell.no-border::after{ + border:0; +} +.cells .cell-hd{ + margin-right:20rpx; +} +.cells .cell-hd.not-empty::before{ + content: '*'; + color: #ff0000; +} +.cells .cell-hd .icon{ + width:40rpx;height:40rpx; + vertical-align: middle; +} +.cells .cell-bd{ + flex:1; + display: flex; + align-items: center; + position:relative; + min-height: 116rpx; +} +.cells .cell-bd .error{ + color:red; + position: absolute; + left:0;bottom:10rpx; + font-size: 24rpx; +} +.cells .cell-bd input{ + height:100rpx; + width:100%; +} +.cells picker{flex:1} +.cells .cell-ft{ + display: flex; + align-items: center; +} +.cells .cell-ft,.right-arrow{ + position: relative; + color:#999; +} +.cells.cells-access .cell-ft,.right-arrow{ + padding-right: 40rpx; +} +.cells.cells-access .cell-ft::after,.cells .cell.cell-access .cell-ft::after,.right-arrow::after{ + content:" "; + width:24rpx;height:48rpx; + -webkit-mask-position:0 0; + mask-position:0 0; + -webkit-mask-repeat:no-repeat; + mask-repeat:no-repeat; + -webkit-mask-size:100%; + mask-size:100%; + background-color:currentColor; + color:var(--weui-FG-2); + -webkit-mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + mask-image:url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);position:absolute;top:50%;right:0;margin-top:-24rpx +} + +.tab-bar{ + display: flex; + justify-content: space-between; + background-color: #fff; + font-size: 34rpx; +} +.tab-bar .item-container{ + flex:1; + text-align: center; +} +.tab-bar .item{ + position: relative; + padding:40rpx 0; + color: #555555; + transition-duration: .4s; + display: inline-block; +} +.tab-bar .item::before{ + opacity: 0; + content: ""; + height:8rpx; + width:100%; + position: absolute; + bottom:0; + background-color:var(--main-color); + transition-duration: .4s; +} +.tab-bar .current .item{ + color: var(--main-font-color); + font-weight: 500; +} +.tab-bar .current .item::before{ + opacity: 1; +} + +navigator button{ + vertical-align: middle; +} + + +.list-empty{ + text-align: center; + padding:60rpx 0 30rpx 0; +} +.list-empty .icon{ + width:132rpx;height:132rpx; +} +.list-empty .title{ + font-size: 30rpx; + font-weight: 500; +} +.list-empty .sub-title{ + font-size: 26rpx; + color: #A1A1A1; + margin-top:24rpx; +} + +.scroll-view-dispatch{ + height:100rpx; +} +.page-dispatch{ + height:40rpx; + width:100%; +} + +.navigator-hover{ + background-color: transparent; + opacity: 1; +} + +list-view{ + display: block; +} + +scroll-view .scroll-view-top-margin{ + height:1rpx; +} + + + +.weui-loading{ + font-size:16px;width:1em;height:1em;display:inline-block;vertical-align:middle; + background:transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3CanimateTransform attributeName='transform' begin='0s' dur='1s' type='rotate' values='0 40 40;360 40 40' repeatCount='indefinite'/%3E%3C/g%3E%3C/svg%3E%0A") no-repeat; + background-size:100% +} + +.weui-loading.white{ + font-size:16px;width:1em;height:1em;display:inline-block;vertical-align:middle; + background:transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='160rpx' height='160rpx' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23ededed' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23ededed' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23ededed' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23ededed' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23ededed' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3CanimateTransform attributeName='transform' begin='0s' dur='1s' type='rotate' values='0 40 40;360 40 40' repeatCount='indefinite'/%3E%3C/g%3E%3C/svg%3E%0A") no-repeat; + background-size:100% +} + diff --git a/assets/icon/eyes-close.png b/assets/icon/eyes-close.png new file mode 100644 index 0000000000000000000000000000000000000000..e93a573a777527128a88376c9ec57c1f2bd66c29 GIT binary patch literal 1906 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 J#5T;>{{W=um74$n literal 0 HcmV?d00001 diff --git a/assets/icon/fengkuai.png b/assets/icon/fengkuai.png new file mode 100644 index 0000000000000000000000000000000000000000..68874d45dd2ed17ec2fc3dfa430747e72d1272ed GIT binary patch literal 7385 zcmV;~946z5P)!a1u5@||uXZFmw_dM<;1SGAr6;x_1ky2?ZeF)V`El>&w5)rGV z@=!z(u!0z>@(?jlp&%IKRS5EsH%SEq36De|3Ay)jPTarmo|8SynZ4G`opVoa`8waX zz7KL|=FEPqyd|lC(?m2({FWG1BYQ$zTi|VoY z_c`0}s@LnkXvg<;#^|9-7FDainfHBTBVl02+p@I9LlaAaV7od0ej~Y>U_^g}6x(T23Z#=VcWMt$Gh2I-R?-n-n<~WYu zvMt9wJUskbyBN<447b_N&Fk~NZ`7DSvCp)H_dU35*|NEPU%x0?Xvc9t{$3_QAU;p^;&J>&aeyE&d78=L>? zg0HP0!F=!JZ%gOQdD%7{ceT0`Qc)T=T14)}H^GNx1~w~}&6(482Cf;izdI-gM(fdF z%6@wz3jSF9o!C4v$UV^<4uw@2Ct8}BDe=FNLWp^2ylp}-t% zyKw)2YE+b#ELrjjOTW;U)3zGy+K9~y!np4#vPtbTpO!accp3*=zt<0yZm`VD0c_TI z)?qIH?xXbht&03%@pq!|e+J15RX_Tv$nH5v zmcI6VpHZaI1nR5Z2%8F1WUi^lajo=eTQ%>IzR~{9_w%ZWsK!p?@Y2yGK3ALTEd!=o znVX((iGm~SJlvE;cFk|tC63>iI`lp+|Bm^lHUVgIqa&u#jDq*01=;!d$LW&&&i`aj zD2K|a+}m$LsPznPXJdx!AJ?YIe#Fh)6SNUUdkK;Vnn0DAdd}QyC-ovLP5u_9_Su&9 z?@!LG1PJddtHL#m`5WaoE?`sUc8Eph5&!!*)q|xoaX8y|pFMC19EDeAF)&U+X&=o` znIv|foT8}EpYe^I-?zW_m-fE9JNvf<^OYuj{Oy?_JExCl*+=ip{)k{zcL88V;lrgt z+&CI9cuR&F@@IqCL``FU%eS!Du4xK_;N>qq{ewdkmG`XV=9DP5l0`5>pov--&gWi@ zic8>N3~j>B`=8q1IbV@z-{9V|WX-Of`R%k8g4QC;=cC+{lE7b497Z4Yt+8e9FFL{V zlAzmr28vkr+Vi5V*l;iio@tbS%(&fubc0e3Yjb15cN&EoXMP;MDw{ajMRvO6WBaSb+U6P zth7?$2bOWJ?a)f75u5LGQe(?nx*D?geXl-6SK0r*5)w88^qfb9Mx*$G=b77*8;BEJ z8QaIE4g_Y#s6I>gumf>tRI5fHPgjsTe@WVMOwB$Xe*lO>JL_SqKh6b!GBCb3ox|A>v> zG-emi2ej+)P;CYP3QGm%x)Udyhk>v5F#Wm74TSSUcGL{*HKneFXKXVDX1=S{UGu2V zP1agcpX2Z&Ga2m|nF3|BWQUZS|3%wx|4Ot1;hQIUXRq@yyil39hls4OKiJ>1g)sT* zvd#XftPsO@GMUo4+@0DJtPCb8uA+rW3`XiY!pei$HvpopzeyQxm&9PvsM1dq;mx@da-NBW-_2vT-)ltKskY!a4TYHQ9$u@X0O%4-e0K ztpGHE+KU%2epPpl@L>CBo&~u8Y*0c{`=y`j!1gZI7}(OE>nJdTxzQE@5d~0SfyHcN zQ)dzIQh+@f+TLFY-_W)P(Fcm5p3Kkqo%H%5Va0N4jgk@YQ^xvc^wGiCPfNe+!ziQYfc!PX`Xm&t7$RATPL$x9Z_P459Nhy zqUJHrQc}d2F~9D?0w2gdnhB$2&}bl%Ml~2I;!P$RAbiuLecxy=1Dj=%AQ-JK+$niK znuX%PyEY9L!7IuAA@_B%Npn^0#Vq2n$&trEemO5m2oX8(|NLfos-|&db0shXh4MIxk+Z z;8j`A>M?jTsfChi(Zaftl<`QBm@-mN3E^#K{nBfSk3lfSHU+6vO1%91t%%ngHB`Z` zukWheI940g@YHQgpKnCwKkTaOzzzjte+vh1XKoLk^|4=f$bKm^v%)jj z)hy`LJu)7c(<9-e_@L)~52MD3se3l}*Gk;e8lG6PrbdoLLwjf&PlAQwg~g;Okoxyc zJ$KhhQDqKS_znX$sUm?l0oGU4-CIR3b{xK|V178xHNhk>Po$IVVH!KfcL>ki%eNNG z-U`w<=t>Us-14rouI~H-vzqWLWNKN2A3P7OOxP_SRh=IWSAA6WrVnoMrIztws8$N& zZnn1I^@>EiO3S5n->6Ff;EMda5>&6`boiX9oUSKvpC@Npi)lU}7A3%kAZL>G9w^6v9~0jj3l~u&-&^TOKuCVupWB2(TaiACSDy;|s{#A9w{d$X3GyCn!H~ zc!Jqa@ImC#(hA$!{`<*FoNofu6gDIWfCMOElaA=&feM~%pGPxs$W%1R$4OrRK6trk z!<*n>L3&=RW&J49|7c|#cNcZI;46^htl_nuN)}R1`HJ*2+St(!3uZgD!AK{ZnG>^| zf$zcOON~+Y3bM%)HpQ2uAHhqS06r}DFxOUT#irzUQCX#M5b#aBtEh)bo83MqOuD(0 z?~obTobFL$Z%%%r45I{Drh);S>KK_jWeGefpL~{G6>!>6w*|2km2?&t_t7u$La^Fl7 z{vU+HsLc}8%ubAW52!ynBq620E~AmmzRt!8f8e?An5~knY7S-7`fOQCU&TAfy&iS+ z95E(Z4ZN_zEmI5Z8IQR<#dLQ_Oh>7gydGN?U;1W}&Al<}*sNF5>5fl5mPRsdERg=$ z%1LciO-)@ezVh6s(ijC%VnYCk`gAp_<}Z}_Id0Ykj(t*w!6cHwuaY)$GmhWp64oWr8GieK-u8dFGgKoU(Bz zh>`nZgW4trd?FMiSh6khVe#(vI4MCH3D4j(Okot>$lOS4K>4IT6+Mvhl%Z#4UF?_( z9XtC}58s|o{lhsDMchl6h*(~xw2H%hx|KM58wwCc-sE^rYiVJdFqemc8MBamHK&Ux zqhOsBR42}vx2~45**76=JPx;5QahnW3VxVYTV49#;HZXHR!G7zj>u^=9Z--KJ9nYC zau?=1sA)eJ}$`Ab1{^yu+MKiNbf|9$fX3Zh2D=Qfm_AS0Zk@ zH_*Q{)h%K7a1cz@-!%_s5h;>B2KK3>*iOm3Sr|*oHI~Zg76BtL4#8Qp2lJ&=9eJ;q zz#oTS9k}Oo*euDwVjn6!lSYEoY()=u*b7d_k{5?3Iq8x>;9GEd}r1iX6Z=H#XcL4+Eg8ta9=^&X|$n>qQNfZ9tpzOeK9qfe47l6YbV>{Kqf2`X%d?wEgc4-9tq)_v$#j3 zC^{fJA2oWbZ&TRsA4*8RedI|E?#NkuZZ4rMC64G$ulK zr5U&x$8TpdOH!5iq%z2hyPF4Rif3`wxqHIH2QX>WNxCN6X%{T@{Qg9JXy{Ekz{NS9 zm?xDe2ctWY)(X$B%TX6=4fi(U*p%$N@erngk4P^qb3g#66*lPVl-Z*KhyV?-uX=LD zqwuHrZPEn1lQhGDFs%9_E5;nKXIeWFiBo zpxMTxnnsYk}$Uh5y&88rtvtkwo-8)}?`2&AnyGzUOLU_A}VM z@UdyP@N^jVNh!e~t#V__x_gA&?UdKPK>L&yno9?9cb=8rzpns8Dlj3TP|Fu5f}`&4 z8J^>N^Av1AOYk#rcmeo~Tp2Pz$2_pdgPd9{SH%YpoWMaps>AB^t0@c+z`1ZjsbfY< z@J$?tn!69?^N*Xw*40L&ju?WQ(3_%{?}U(ta(H|n~XF7)n043~XI%yDf!1foKgICbXz(jyOpw=2i47&5w zh+T#q%vl$Zdz3Q*pP*NIG2eoLa|W<8A(Cwyx7s?HuKa2?Q8!8(0F?*}NrNeGc3Y^x zP$*=gCMY;HztWADYW1V2mYB1zZA(xaf0Pc*lR=iEv3%t96whufA)5WDhAgpqs|=T#49h0?n0}@Jv`{vs3MXla3f1ur!H$8B!44A8;JV&j({!B~6hazOYOq z(NP_MJYH!@a#B4cZ{D#$XEVy7s10&`0f>SCTC|5fZ z`e;-7U}PDKY9?u6Q6n^C!4o{^S)4I`a3pk9`Dd8MvkH`B7XyjY>JiuLLvKqP5PRblM}ccm2o_d$hJGH}Y^y61Vu z+oB_%>Tq$iPIDM>SSVqW%{cTjVzJ{wpC{Fcq-XOCK8=tKsi4s&(hb#Wc$4M0>ZJvx z>~@{XoFAu&IOUskVWJn)cf2Ip_|S2wLXwldLWzaop{P9lK&EJ=LPdCDdD5GjxzxOt zr=09tlV~jkgL}KCzBQwTyDQ)M7*36hQmwa%c6Wgb&4&Yl@kx|(Be&G|kj81udos;6 z6W%11c}+`gA|c8epDr;hzljsEVMt*#-yl!D587V~Cl+cpnkQOV&H{*S{+>Ko1;Kf1 zAqK`SZB`8+^Y%HXNH+9WrOh&ThCc0ty2 zQl2w0?807m!ZA9%ra_oU0Zrt2*V3iE)iGHMNlgX3kTDM@itAjBj>#-Z%o-bWWG9R_ zQIculiH&rB#L3wliFRi%XGB3j7#=UpA6aF|5Si4)liw(wQbp<5*sNmE1y1I+b}G}b zxywvrQx2vhC8}9xl7Ro6#KzLzfuzs!gd!b$DqQR;VpQa6l&%4q;=sC6YfI{>AHARd zFf}*yJ*nJD{*988iEvDr_shi*%taXtA?7d>>dX>G047Q@>?DVc-A7-nMbZ0k&gxlb zthcKhC-oU~Rc_2GAG2d4m+C)6t4hk`0Fz`;f<(B4`y}dk7b``ihQIWvSzn@riqxWH zA_1eUaN3rsM#%}PfDl@~iXnjU1!u@}IHvl|z+@UJhs~snPSX2A$vuI?lX@9g?#oPE zS@3ZbWLmQUAP2Et%&fenf|E8rrGIm^zR|JvZRZFqapkTD-RFz`sKN$*s6+`Bf3ihn zo@T-v1Is;hQL&}pfjN~jIM4ZDiEIX;R&g6Mq~CKsiZfHmImW?O0_8O%Yihw!Jz*z0 zW{NUz%_&kbDAP^ z`8K*kGVc!5F~wvsZq5p(6RFA^S_Rj(&}~w`oFp(8Du($!1>d)Z@QFg>67y)!6X$JK z&HkQ*@{7f6DaXL8lyUDZ9(-WT<-+1eh#Nliw0?nN*RrHv7pkL{ozw3_qofHk(VIHy zoR3KL4!-#!Vzp=wXl^;iP+7d##)rW=1L~NH<8Sr|l-rUvKF(UHak{H*E>s**(_xF_ zhHsGc`e9>sN#4(?k|h33?T_1k!ejc*tTFk^n3&I{k~|)jVU%H0nm0lgvI-vUDN8JX zB;JC0EntUzW#B3*p*W{^4T^c4m)2~QT8(6xAT=|zFa8NU(HwGl7?ypCdfTW52U;dP zmpz)#b8Rk7GOz-pd?4H3G5-yq7k!P(2~(9i1xc|}vq4;!|0}Uul0;zu{+4K~@$4WN z7{GdwiVzJG9Gik$PDt;U`W#dLh|M^8SN;N~skXHo;MI(VyjWof;ZOhv zT>%#l>WxGT4x@T(_jS2q_w8gJ{OE}61O%=r_#dQR#w*1TRv9Q@Basb4jLTE_?G`?u z8y+D^0R)XiO7_!A?Rm=4dN%i5nA2jUcSut*s|EE~?&E775g4!{gD#BHmm@mHa7;B4yoh+NCDCLJ(UbIUpYHqdmW+gtJ91cjDT=Fs5u& z+x7qnR_lly{aPHzxx^%2^ebN&{H@x$Wk46|EtxyhIZ(jd*Q_?hcyJt*YANF!rngf! zn!ShVgXB-gfVJ{VS`$3_NJ$w_nXy(JB@%(W(dylf+7v3fq5Dug#8cJe`;g4;v?|?(vkgjY#??0=@f>3A zx}{Y>h9$f8L0Sr&3n!=-lJOjU{z+CCGCYuxn%M5&I_m_UTxsyOzU;Sf*aRMs1M2N` zq%4IB2P;vi#p|+A)Vb9VMBE>8QAL4upA_KN-($ zCSe>RB%N%q0wFlrQ0HoC7fV$(yOfg4v1X8wcg2V7dfNiF~u`DrN z_>WSrqqge-VZoV5yOdKzk^aG*gb{^|Ch@}Ag%79^_Y!J!H~R5&n|=Z?gscxC00000 LNkvXXu0mjf_l77w literal 0 HcmV?d00001 diff --git a/assets/icon/index/cash.png b/assets/icon/index/cash.png new file mode 100644 index 0000000000000000000000000000000000000000..89c4d69069c75f0aeb6bdcf83bd656c980f7dac3 GIT binary patch literal 1649 zcmV-%29EiOP)Px#1am@3R0s$N2z&@+hyVZv8%ab#RCt{2o!xocHWY?mw;ezm7@eT$1ZM7fSB=0- z5c{%MmM4fkftv}MP9SxHI1`we!0H6<1;pBtMe2YA$phlN&vPEz33veL6aIe)hG7_n zVWhxW1Ro2a0Nn2P^WE=8KPq4geBb^2vims+C9npb%|@}O-RFIYFI1yY0*?b^#w<+u zvR$TrI80=1_LTve%q9NYGrcjUxGr6^v@V23s!?y{e z_56(9Y=K|#!?riHiM_^`Y$Giy;OAri@k7G{B_?#LI0A-c3&Mw3kNA$2tdI-dN+EReh_%gA zB5lL>#@&a#aVL!IGZQYi8QclOxz~Sm6?-ELXAHwe7;dljJrw&~=%f;cGlroOhTGG# zX;LLtWX3RbYC?aCor(!@_zq?TJkY&Q;dt3%wdvtUJ@-WD(vQr7x9NVO+hotNiHkKl z_tZ&rx^Hukn%E2c%3P<+9=n>nU^h8A>lQW-O#JXG2GFlVzgX@k!3XwzNdUMfZq)>TF#w|*Z_a-EG8lS0rkvD zZ1APKisb7yqAwN9P3(#|)%iA(A63jvY=~2x-!Q|W)*Qu#e%1K~Uxm+(RCcN?feXf2 zjBxl33lg^YFV){9*lX7~&JI2HGL?;eXkvEb>`P>u4>WLzz6}n0Xcl`xdPj_|(YIjo zKbpmMQzxJ!YBxD(7F%rzIf2@AYZm)q>I8ITGj#%*&@A?r_;cMubBp517|mjXpBzc0 zgjXn^V%08og}>_Q2AxN7w)k{i;cqC?mcCXrPO9{!M3$#=n&fq6c9SYbL`>|AFtIbj z#LkFRmN;Ki5O$N|FT!xYBb%bF@Wa7WhJ=l1?v2+ABU3MBzFyLta%wcVH=a_-zDCz_ zXPuU-NmCI(Ds6UwE}?7c%XyO^6|pscpvBY)kdlhn=Tj%31qAP@K@&16b7q&3clmm{5iJcK9c1GkNb}}k`?7yr;c7PwjF$sn~mY zJ``KpzG>b$a*PUpW^8lt@AZO4YCA=jr-J||3hxrxuElldWKPe5^k3?}Cc^nOCv@_R z{M%*3r9iIH$uG3zjXKZheAm_7amcUQ7S+C?7q7cW88O;%gx#sWk~$4J8BxCqG37Q; zGmiGR2{xHKbad7b!9Cp$r`O|Eo3-kX0r0VLduh>nvf&3oE zu@;2;g6!UtkI1g_c+WVyTB64>)LE};AirIZp5gje=&us`Q%4RP4vifqc1D=k8DU~) zgo&LICU!=c*coABXT(r5Xs0Og_kj03SyBkXY&m`6!y&(csS<=a_51^H7r~cm9AVpG z=WI_TbjfWOqz4dku}4PS)H!CGU6S5`z@c%Bc#LXHv8C_o$c>A!A{tX{H)32VG1`HO zF~$C8#JEx-nfuB^a9B_LSO;ykJA0P+A;;7ovIcu(9Si(wdsVHk#C7=~dOh9TiUM%nAcd?&z<00000NkvXXu0mjf&-N=l literal 0 HcmV?d00001 diff --git a/assets/icon/index/scan.png b/assets/icon/index/scan.png new file mode 100644 index 0000000000000000000000000000000000000000..5b54c7d30395854843367f2c1b15a686e2006e81 GIT binary patch literal 1252 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b#^NA%Cx&(BWL^R}EX7WqAsj$Z z!;#VfGIEGZrc{}&)#M^EHt@GcqOlW-mV)lyJ`EG3Ycx)syj0Hpw-V)p()3}CX zN0-BD4hQ!QHm}m;8KSg>j`3LVJ8b^AZ$R`+ac%%LmB=@9%!sFu*j`54+K&!bZk#^XaAIMC z%qcBqtF|Qf3pcv2PW)|@)pV|xQFi5m{wEm@A$}}PVXu{ch)i7Y)&8J&yzjFk^He3i z=_&kP#F*ZG>{`Q&IV&WStQRrbS_(=gXf*D z-*vmsdv~>N)srj@AKlN^dTugo?_K2bNcxzJCHwEc)sOnC+;g(u{yCY|k@`XK?Pu?U z4+WR(=3jQOsavy|e@PjOMom;DqK!M!X?e*cwhIb>`&(PcH~^5pKBV!yBMi0QayAl&hP>9N%N^@m(uuh-tP z`fj@ZT6KX7vsUdBPcq$bigWsdpA+g2bcsL9Es$27<(1qoDz;?j;ZL&m<#z(B-m&eN zda2`0#)bne7lev03f7(9>CB>2up;izgK+LATMp?Lt6#aS@?0nJ!*SN4sD&?1o?k1l zq3`zM&kJmR?i4MVy@e_3#@}+`G?N+c&mYp;U=S+#;CpMM@|SJh0*|ulBzD%aK6w6a z_p9J@-mDMQ8RB;>2wGh0`{e1-!*bd+UYi&Mr*EHnWnaIyC)|e?4P`x zC+_T>m5xk{1#R_8`gqF7Lwu(b_RdKcnRc-8O5YEz)C&gg1-@C{0;^9MojaT_axgMAGgSl+meD-bN)^;FLzoiE9c*PZAJF4st+q>Y8~3- zxckHJsJ>Vku3Hk1I1k7RZdC+wj=is^TH*10!BMtts7kbjG7Q`%M>Ui}E^W zm?)^ID>>)5=Q{ZN8CYk&T@4l|TAZ34@n?au8PwUIH yOhrR1BW3elF{r5}E+Z7%Zp& literal 0 HcmV?d00001 diff --git a/assets/icon/logo.png b/assets/icon/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6ee827192658157c1b33e6f4cc84d8f73e1c76 GIT binary patch literal 8469 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 N;OXk;vd$@?2>?d)kLCaX literal 0 HcmV?d00001 diff --git a/assets/icon/tab-bar/tab2.png b/assets/icon/tab-bar/tab2.png new file mode 100644 index 0000000000000000000000000000000000000000..e769c873bc393515d0162eec385c2cf802df17a9 GIT binary patch literal 1170 zcmV;D1a13?P)Px#1am@3R0s$N2z&@+hyVZtJV``BRCt{2oI!5eI24BeN7=ya#>oZ3$}x~#-QDaa zbAm}uFzE@JoS?}G+MXcp37VW>e1maz0TQe138L--*y5XoIYlNANy!morr-y7V~S5t zzbQTPnNL6>kq8JqrL&ZB(C_ypGY`6Qs7rdip1QxkFO^c|x;9!1B&C!>h<5-E0LXPu z{LCl-7ea{3+uPe|n~seIGQzwEaMa4R_?T#|&y-TC$-#{T8jVKds;a)=<%}2~D$BCN zo12@N??A6WySuylTI;{N@hdKf=x{!tUpS9(HJaP%9{^E4ggc= z|IT6XqN=KsrjcONNGVTD1U|ML@)v+fT|?~%l2Q(Y5O)@1swj$At-XwZJkP(v5{b3e zuj+pA+GkLfWe2vC5YgG1{%stW?^%|O>%OlQh?%9$kPyNAOOGG3@sK5 z)y}PW@c3SP&9wp%k@boHl!f1>arth$X6HO8kp%LR1oDss^5B|DKM5(NG;@n!YdIoP zZ4+Q^2_jIQ=f?m(Fmnj=KVW7Ihr?-ARfnOXYv;F^lyU&zeb;tvF!R1yX9b~ify^@H zxl<(jp$vB}&?ZtJA zq;FHfa}jg8LmII+%1@E*2uaN8j*l@ssAEiblmIS^qB!l=tMy3f4i9Of=phN@AqnIm z3FILOrjdUaxjX z`b%KBTuMiC?VzX?NC+{tSc+Sj69XJvlL^PSt z=WkudWIiKzcXyZD+uIVriw*AXK;5PujJk_%eqloCFD2hg< zrLA6WVv2o_i0Ds8$cz#qngaN2Hb$t%{nkCUbpFfQVjW6?r5~6vFxKe*FB~7QlZdFy kvh2sj#x@a6BodwQFKI)dxE0f)K>z>%07*qoM6N<$f_bhZkpKVy literal 0 HcmV?d00001 diff --git a/assets/icon/tab-bar/tab3-active.png b/assets/icon/tab-bar/tab3-active.png new file mode 100644 index 0000000000000000000000000000000000000000..0154dd36312701ea90990fe9b5e79abc6098a208 GIT binary patch literal 1468 zcmV;t1w;CYP)Px#1am@3R0s$N2z&@+hyVZuW=TXrRCt{2oKH?0Nfd{_GM)h`3wktCvKxBl0&$j6 zLZ&$Z&Iy1M04D%WKsW(#g1`yvU?i3}%3^ktPIfaAl39!tGPd6=s!SMS_n)e2yY1wY zEX%m7T>azKt5?;pN-+VXMFd2^V<12XQ3ODsFCYd$(LvFs&s!92y0p~_opH8RjpIk; zf{=fSP^_Vav84mF5l-oGG!C%}6-X`!>9K>bUO@F76elPS)HB)z)DILSkX#VbWgn;) zQU4H{RM}8ZP1p2@SAmShY$9y=tT!Va;D9c#e0Du=0vT}{2%)b!tx&`$Ui#{G6(5yI zi(R_BpSU;xLP(#6ocpn2XA6=RyTFcnQwm{EEwk%Vfs;UT&S60#luw*QvhHGX&i)jL z1F&PP+zKm!q{Z%pMk-sZMatd9%rb13CogxSeOr7ND20(vVv__K zYnsVKQ8of46q-3IHUf2vODQQGpGPm^j}*vcNX)(!32{<3NSc$LeJfJQ_n0hDO5vG6 zc$4&X+HC&RYhwmfEti;V%O#Ow1gVdGnjQ@=))S&ZP( zntliPrwxB@k1mssj#}oYqzkeL-TD)U-RMU>j5sGXtCT# zO^vChRv{dNqd*VWlW%q*)UU-Hb^f*w?^c|e1?hgZTa4i08vI<(7uQ^!z}2Z9-fv=;7UW9m%qNh~ zG?;1t4{BPl`6c~%Fw%89dI;}c>-X!X{+l~(x~$~M#Lu6jsMGM?=Pg$PI#hX*cRxq& z6-D)w7|Gs;OM|d&v)RRJ$yL4Jh>XKzDNt;iHs{8AP1-oRX%J~oJ?E8eVfVcn=WHSD zyVg?(!iKHo4DhlYN?JrH4omZ}(c_jVFOPlHGEEamHht9RgyM)fR($Oj^S&ih&R9pW z&$tt>6fu4FT)WiQ)fRv>2&l3JY*MsPdX9MD;)s*0FOWMzt>Qn|sEu&o+hXoBmVNVZ z>&RD4)|#zYO%!bu$3<=hzsuMJx{EXjOoC`gg(U{3FZ`d5@hcxDb?U-*zT?i=yO?p@ zUwqJ@YpHu(Ozu4T9;{|o=E=oAR zM^pG2scb3aWEl6!>KSz^tU~E_1vP;;R5)=739JP&D~qq0hGcWawr!+sKUviqe9JEm zfUuu+hv9wf4i?av>5)y@iJ@4vDQ0IuKNjX|I=APS`6sj~l%BjW1oe!zoD=78%6f#+ z2e#>{Lxs*Dd2-ZZx-K^k^0t z*qH<5>ZS`tLoc#8ap6l*m&WOHJa*8|T3d*4ocDYTUzka7-Na%wbM#=7s@)?Wfd2qW W?5`A5UhMM#0000simy| literal 0 HcmV?d00001 diff --git a/assets/icon/tab-bar/tab3.png b/assets/icon/tab-bar/tab3.png new file mode 100644 index 0000000000000000000000000000000000000000..48d3966053a40af1af22ba92ffb1f17f87728fef GIT binary patch literal 1954 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 T5wP3V00000NkvXXu0mjfSyEG{ literal 0 HcmV?d00001 diff --git a/assets/icon/user/password.png b/assets/icon/user/password.png new file mode 100644 index 0000000000000000000000000000000000000000..954489bad476e038fdb49482b6c8af93204900ff GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|Sc;uILpXq- zh9jkefq|LZ)5S5QV$Rz+2MaGdh&bHeF1v0;a|c&aACKbWkcMDJPgX_IiXbPgj+G3- zjdKN#9bdxi!rCEieB_^uj+2pc=2DMrvuFDk?~SV6dvj`7eK~7eVui~rnKi*m^8`1m zWN9x5dpYsLwNL?ZoCWQrN^%K_G;{BEtUM$r*2Vq@%(Sg_z5{DDwgvF`Clkrf3U^l zpsD!XCFVab#<{#Ro!;NfBmCqLi=}}hpU;HmdCRMUrwEJr%vxf7`h?r>+Ju(lh`uQ@qhJzrCLQe3@jszv!Lv??5!%5-VKGArh@$jvEYRGlA7pZ8N~^+e{K=`(w$T=txbVpNsazO8Qp>Mm0TD||EVX}a4hS&&`^nzJO8fSe z*Z0Kgj#hGf4vrHzw&`?WD6@33NEDuzn>l$hsrs-{U7VRxSYtY>h|*g=fCS#i%n9vv*AgTp6As35|Qxh zM*K${UD|UMPO%*05cFL(HC%i?gQnA@y-F%4vNl}*_H5=g)~k-szenAk^y1*0y7&3! iD=w?@9IgoZ!?sfGq~4~BE31Ingu&C*&t;ucLK6VZXnwu` literal 0 HcmV?d00001 diff --git a/assets/icon/user/service.png b/assets/icon/user/service.png new file mode 100644 index 0000000000000000000000000000000000000000..2fec7c19c3437c39bab40b7518934ee79e690542 GIT binary patch literal 1735 zcmV;&1~~bNP)Px#1am@3R0s$N2z&@+hyVZvaY;l$RCt{2ol8<1Nf3s=l;j96H7Bq*!N^NukV86w z@d+$WFmM9F3BV@+pTPJ8>JbnuVNO8%23k5|gmM<$U_`&Fx~pH9Zz;N~O20Dem01P6 z^2#f}5mI*pve0V=8z1~+DHE3Uv?iNI2&z{Mxo1p=cPK-Y0rE`9$V>PLw+KFKe$d5} zzqqZY#mUqnsLturWf$QiFb4XLie4g|v*us!Ijh5xD-~2P7$bZ}nO0EU67Ya8GQz8% zKA<8&b-|PlGc?1E%fmzYDjzs2yP{GBZGe!Q1pV!SeBiviDoQ}F8L;9Q*e#=c2YB?@ zlWlz01$SH*s23cv;*REu2{2~GonErJ>xQ%rRMi3qEkpnty=7leK#rSkhr)J5X5(s@Dv-Hy(hF zWW-^lj9@)~+KNF;@aZzKnNrz}@+(6jgo8LS0c3c6BfJWVp*wI2&j>yCy5CYzyre{4&aSqb9{5+xRG7^S)mx9cI~& zq@W9?hSMA0uu1XsTH^M~Aj?YAEmZhyRFM>$0)?G@?GZ~OGORRFP`zM`>8hp;lXO=E zR+_kZo@Swc8&{GQL(f3x^r1yRN{5fhe~Kaef@9+fgm>1BdPrBj;MlrRA$r9SvPaLx(T#WectJb-X;ru~2!*kG?bps#`;d6Ij~7&PL@e*^tW>Xq zumf#!^-accA4UWXEzSN*Cj4TF1k2gBiV4t<^UA1&T3Xr@#+GiMx1Qz@qg7PUPJt0y zEv8yjm%vpTFqIbwkjk*}pZ0o3UX;@yJP?HSt`tO$&YNY#L*<84DmI4w3ws8nyE_O;DE@ zY{otyI~=@#{uC%vP-S2fEu_ojC5XBy=uhXd@>$y6;ZtNgNGfQ%s2hToatx)zvFWJa zN>QH~VVujm6*b7d_-6X}qo{4jEFo%yaTEJ8zR1uj`(hiP9`74(sTyrx+{8ZekRxU` z8N#h_e~AVb;{+`)`Y4>*>_|0U)R=Zf1r2gJ%VW*lcxlQ;pX%kP?Ho7?7Y^%JIQ)eL=6HIelGc-vR zwARR^GUW|7mG!G8(O$vNI+&5YW3TKPH_9~+{c06mfJrKmfybJiQ@Z4|qN{<@@Cc4O zdaesLJTK+RDEqLQ+k;`{Q>*q-A!@*O@eFLl<(Ygo+WP4ZNT(bENRF9 zm4%0J8*TtE5qy+B!Z5shZ(vYH`4 z^>b9@nxTAxmL15e3uQ0qY7bL-x!x*xShjIA>8iFDfJfJUG*2R*g(|~lT!&ql*sG9= zkk{qy4tX_?b9&~>NgJ#MwK_-NG=eLGkIKA@InUDbhPE9ktU$;Ij4f0bOv5us?GaNr zW6gINm3N7Cw8{*^`|f5fSii&5O_Dcwb;S9T6CIi_A;AF|8tdB dUU}uW;(u`tQwNv#?85*6002ovPDHLkV1n=aGFAWp literal 0 HcmV?d00001 diff --git a/assets/img/login-bg.png b/assets/img/login-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d7198842dffc4d5cfa50f486627a15caee4e1a59 GIT binary patch literal 9294 zcmbVS2U`^D`SIz?^=l}H+I(s?@xEUIH8EFSPC35UAoLhqrswg8T zqzsWfq4sj@*dPd`OtvyNy%OQRG}hRgZ*m~v$2I8;Q}B;X>`={adK*;*!weg6nlihX z+b9|QiFBcF;>MddHISj_R(riyl}hGQw{s3D!H<8g{;kH-d^Nf4oB-eQ;nWj6=UzD7 zyPV)j&AxQ&5oF9kSJPf#W#^`6HDs*p_BBzofB_usZiWX`^Cuf<(hnqF0R$}?VLc-Y1>XsZm|Bs zJW#v-`~0VPVX-~oJ!s{nAl9hB9I>?1?Ev_l*gC4MOt-f4s_o0F0I^346Q!he6nrkE zq4;Y~y3=)oEKEMF3;bEN4ZCTxj*|XM*pgfU$}bi~U%iT93Ajz^1GhZ9QWmE4>`RSC zoP1U9Y7VyP?uF@FHI*@nCXBQ#0_YYQrGW9hxLQAPzBpEjrxv;gmGEa4grEGZy1GnU zqIJHQj86TvY{p3d6~8VX=l@*Ay87)*-TKR637!FyEh)ZQyUnU#pK_jggz!Acv!Z4L zxrLPl*V@H$c%pJKbgsjnRj-kON--fEZN5#bPM}$(g{For=Q)sS5T)(H)$J4ZU(?g% ztn1|oh3tI`)_$9O;9 ztJqaHd%f$!7?T|L4TDQ_^K~-pcG+Sz3RzNypSYBH=j&{9{o3Oiw=12UEUvP~Geb#x zEaQ8FS7W!UtDfFo5(}URzB?Z0*MZIR>KNu z%&^hrnEX(&)-SgtO5nkvz0_z}ToeEO!q6aSZ8>kg9B(*hnl^v$Y}*}$i+*=Dk&fpf zL*EaN6=-_89WN2*OowTD9+KF|85sMVrUOLc40uV;#w|H9u7F9Jd{N03ocxPdKfnMCrWWsx8`d_W-x5LYN6#;@ z30S|RO;nZoadPX6)m#M%_E~hU?~-}OK-cP+; zMV-sr+ia|0GB;$?k+ZIDgy#P=*{BklsoP-q(po*3L2ZqfA9a#<(GiNUdRW&$(R`ZtYY(b`Uu3s`-;ls}@p7R>gbyh| ze))uKnYbG34RWI+IR~d34rpT=e#cc>c!z9?)7pJPQg-T#pPOJ!*z<(9&R@h+3Qm{T zJjMwnSKk#`McItk+r(@j5GR*3UThREhtf}BW`?nBy~%*ale=e`BR{HqCm;S5AVt}l z?8{VOw6F?dSy#^E5J*BP7^{QJb0EePTf^4{~!({YKv>U1OMtK59=o*d|7<6n^sr`(dD6F=>3w*Jn1gci%( z*4`N%)0Jb2g7p_K-1Ga;bQexHl4W}J8Zu2ae}_`VxgXDZ*b8^Q6n1R&r%Fu{mqs(_ zRPKTyKW*c-nQ(8P9qJ9!f@y^cIFjPK_>M9^sF4KK&-!Y!lUv(AVdK{)pN? z7>XP)b=4Iwen}a%Tp`lrsQfp5Mg-`-NfENl!oXD#LU4_}w(t~{p)C$I%?huH&UQ(` zKJ>w-s?p)Tg-RQ1$guvaXOENNCrvs<@vq-Sd2t6?e!(oe$efQ+(+;e%ls`vN5}Mi= zz0~R$BoSeh$yQ4qrIg7l*z-uXOrNGk5|b;1D0V4$!uB4qGkUIJu&AMlnoVtgfqAx* z3tdI#_}e(XX5GtqzYE2Zw^|guTglW4K|1`Wk`Y(gD7J`YJDL%oi`F(7v)H8aMZiw6 z)udo6azS@u1`fJS%uKLWg3L|DvQky&UNv zas7^V8V++g$Y*VV8lS_n+sAj)FdTmrP0e+tQ?I{Wns_qofZ*m?$GDl$&#R%8au16& z7|w5?fJuK!F``S#CRRUFE0QswisC@t$u6Gfj`Mi*Ct>ITo!t1)7nK6l-Zqa8dYYIs zAz$x9Q}hD$Cy6|C%lE|wvZ;oS(&N+?N~%%03OCKF06RjgMA>zCWTh+grv`d|l5;++ zTm&L#sew7>Q7~GIIZRSl72pt zdADcBM@cp2gl4MFa-&}kjq#VjP5d<>HfGe>HJX)t=A&rfaZB;XB{QiatH}5v*AYYJ zxr43Vk0L&qC~8_Css74z6nvWe6E8bSbmUNh&Jk|NT~oVK_ATg}KYtz!UAj`BNf%ZG z?3pBi80HgVbAazuyhDWjyjT|%Bk9dZJ1%mS8y9-U8((CQQR#HcT2U{36}kIi8mYdD zH1RK*Jem_5rsaS7O-7J44e?KWh}x*Wq9M7#P@G&v!O(-AVd!NGD(-(;-w1sS0Sl=< zKAZV$6D9ryPQeD#yE7%M-)y&;w@BF$Hj#bO6}F6SR@68y@lueFXp(fGb+YW&^|QQ^ ze0QL3k6?8Jk+4|Z<8>YUl6(dF(Z|}Le{9=#a{ux=N)NRd?00!jr!AE5l* znN!;M{I8AcaFp{htmMcL#kzpOZ|XL9BgBFMqq5=_RSH>>O1W>U~ybeKtt0in*f{L zOWj3&{nnRqlg{roeX8Af)9X@t=FoO-+aVaA?~>}JWr=jWQslXZ?`r9T$L9NIc4V!KmeOO&t1gvW3w?-000(E3SyjUiv`=X4$ZCIo2Q+2l82>UcA@Fa%w-<;*g^-#F%A;u&5uYFj zounh>`o#Iy&nLQQN=nGk$=pu7h1lEH1mWSdU&6_?!=>Q*WJ!FTXxrkt<006I>Yr^5UQFKy#>`kY4o*M!He)r zF-K|7=jP(Y&qoX0%L_xtU>!|ud#TVHiV%k>rErL223c>G&%)c0&cj3JVhfhQ z*NA$kn0W!x#|E5$zImgIbR@o26!MuppHQ1>G;%^|PE74D#})&i?!=$!v*&Z3&Rh2sg`C^hq;c@kiuxOTPuFAGq%G+L4wP?cnoo zoQdlY0vuO)oViB&xKW2>xZ=zh&dGh^^~oM;j#9i~o#CqV%P?h4GuwEF%w?VN>m*>O z*x!}v#p^1bN)mu=i4Pe#+bs;6zWO2T1!vjIY-t)H|CPfTn3Di{6K zzq_0`a7GUO_3vwc?jOZCDumyv5A=F%z@_0khDe;pYe}<8jbrvelJ`Fu$fDbE zn9?QE$~+z_`Wp1ownMNgv9X}jf^xONaJWpnix7AFu8TkFt#eqiwfrMKy1f)rwpPM* zh4>x(tsdY5d-&8d^d8Q^;~VS9u(p8mtVA?D#9YC@;lo+35YTq6PCQEj0(}=AmJqD@ zvNqEuwhdiChF^y;`5>F44Q1{M%9WkNv-a>vxpOfem5LUn|2hmBrz}SI8?ZzZ7E01L z7|y$PP+irMo!P*WZtLAXGT?{%A1+V#o>N$wI?yh1#G5;vwQwpB{n~Tr>=HEPY0lQC z#uk5N!Xt6IUa5i}z%{G4HKg{T$&*k-PSuA26Xr<28E=q0PFgO+(Dzcu9=m=PPd6G` zvft3Tv8A+8)NVMeA9#bGp~C(UUzyM_8!y0g9Z^~fB6IfeU@lPhS9|h%cuOK)wO4dS<54@W@vdHWlXl3 z?FEXkF}kx=pOxjlLRy$CpCx?OWbja50Qg*?{e!@3E69SG!U;c=9^#-kaMEw&qA!NG zz!2s!$z|G!FdE1^OO2PT`X2C8-#>Eb-Y3`ZuxpG?95xFOjl*)qTY;tkHq?L^z}nZG zxAOHnoMTF>KR*VNQO9d!*Fq8Im!wpw%}Jw5Ye))q1T3s9@Dw2JKvozHQ!GyacoMey zwPQ~j5U=^n=ODx0j|@iEkrEGh_VHh3f6jn#-l(z;;bjnUL#{)HO5`datn@-s6!Yz* z(A@a{%x^IKg(*G*@Q}EnF+NA><%)34z{PVnCp;--~d{RW|Cj5NP zl{wOP2cBogZ^=$kNzt&_caH9rKsu8O^~fi9m`Hq3q`t#2sV7Uzl@^8T-~IZH^+r-& z-hI4g`&06*yc@MnJ~{qhkhx9UMH8Dg*u)?M*K>b@N5^6*c3mRjiW2|zHQ+mIt&jb_ zF5!AIFw8E9Fx0&mx8ysX-$NMa8drpW8-)8ZTV6=m`{| z8h7`9EQHaTZmPseR_b;q*1a{>Cu@W*8188F{< z8MHAjM;^H4y|kDo!4Cr>h9?tly05dh{>S-_U`aNpSu#;Xm?l z7{%9?dI{;TF6OZj-Q|)2H+!jX`%4U5DHHGC;S!!L8RRvRVHfXnmY&sO*uLRJNp$ji zU~gza;ihggs_bHZSjdH!Q?!tU8+ARbZW>~-1g?si^G!0~qT;X;V|fBBSVL3WE)*3L zrpU)A=IknD|3Ex{T0pHh?D&{hbK9m6z}-O2M~Ks^8T) zVyJ7R6t1vS0C+4>yDQ0HX#>m zG=J;JF&`%J$xZC^TdF_PRD6&7i^>e9-;aVNv-6(hJ`-2`uCCpqkj|!f+Ri@(=J2>k#~li% z^9xY-@(=2Eu@I}w+d{VZUEbTsf0b8$pZ1fpg+p0{43RxFHOM+-M=1--8PSoisG34A-q#Qo1TYW5=j6D2~p z8Ka7#xOm+4*oS{vJNHy^hsAHt7kT^3fu#5|&B~qsme-RgLvq;wCbOXluGd1)2d;0# zFC1z9O%3wQedM?w4z#f*b~z>R7zbLaIO!+2<57WYj2-Z`uGYude$Mj?Tpm>c<89k`%#_o`LNfI zS&g_yXM$!K|0E9MgBF8!UjUfTX3xF)M4Z}=W^MXYYr+}Reg7a`!HjFs)@$zxo5T2b z`&F~Z7%+{ntmEf4PyO&2Gm`odNTh(###{ukh|KTr(NTeKG#OuxIsIKng*6Pjxq~?g z6l zRs{ZnxIY?reOXIGI=uxD|$ zuqDz6E3T{jCV)|h2go7A_Tr(uX^j=IrK1^Pg8FX+>lNmNjJ6VNo`~aBx_AVy^ngFY ziZ|kgQ{?^MP2xc|(dGbjQlKTr(n7Dt`{v54Km4F05!Kajv9E!4I9P~+r2~9GTD8G2 zZxbaG^0~DM;t+>fU^JdIQap-SG>zI3Io5aVr(ql$$Sr}!H|*E)(+r+vCz$&43+=9m z&r|l35&pF^>!BruIeUFAd^oA+)a1LO<2Vc#EwMs}`;JC4!9lNQ65@EUu}F9og}(^e zg_^ydJ82U>Pnx}PstUukyp#JdW#@VvRw4p+v&GFlnG_o2;}e1c*uY8a#@mwLg&HZ) zeW_5T7`us*ohxs}sU~stpNefkHA*wxvxgoV?g~5dVle zYn-N+dQ!=_09x63M zoF-S{FgkQnAjsf&0H7Iwt4_o}wQVpYvk5`g#;d!4A0|m{8k+SKain7j;WsIxf9>rF zI_=hB&cSu#2SpAEZh8z7YrnynLx=|(Qp>~$4mAj1OILtXy6{h5%HV7*w4P#>Pdca7 zkbE2SUf=S_P|lTk(ryjAyF;r4^6RQS<^$s;PFc92!b|>~u^72J`f?eiy+H3T71eHz zVc|M@V3v>QIb)|uiNU#=Qq|auTck?tdh<;-lJKgvBQGe8pm2M;1j9Y2a!lerSS8Ro z><*XNYTS*7hkRHc-xw+~d^?R#zHLT~A4m7A-D9K>UE6Vb=N2;>41dV)vW0&^?uI+X zVMnkLp-yi)ju>&rd(f^ZSE=_W%5;4WU7fMzk-o$U-5oEyJ&snKxkey{{;@z!|3}bij_8bD!x0{P+Wg@j z{>&V?R+s9tCD^>5va6^i;*;}}je-o7vFprVt8}5L-M;Mm2J^Q%?6z}R7xkvY^2yql z#Lxp%#Df!G4LYaoHQ4i)&Byv9VN?V&z3%RQkfciR4^&X|R#AfusWX&(N16&wdUcYk zFRv5vyy)E#3N~KKNp_j^K1lt7vG1{DIl?0$`I7<1nVD;o@u`>w#8Vn!6IHlAwU-(i zADG)}F)~Lj;bXxzzAf_nQ@LyVFAX8rd?9&3NGquP7qyT-oph77c8kJKz+t=z3O~L5*S?w^vrFRc83Yf}OR2I8M4YP85^r9fEfxRFWbuu(eH)VIq!}yD9<>W3yKh_U4=A$dSJvV)ie^;iEuMT*T)U8q2&e7seOI$$^LQ#__U^8MTU~Q zsDXy1{4rA=`p71#LWwRA0SorNB#(czlMCY6_Z|c<%z^=i{9k|(j(~YSi(5wq(?z7` zy$DdFGF47Zwu!6%SkATmPdBghmT7QR9S2|-n5I2w{nr^_=WAoZSX;27xSL+VVI+zl zUmvJa`xfu8we`rF7?E1#K+)`zGB!kW&XgI9%Z&%YPgViz>W?l>5uVHmp^)jfM{|X>EG!+eW(=fXb&r&4Oo$(Ksf_sKz=Axm~WAC zM88aCk=YwIj>qHkTx~#v<;`iUE&uPg49Vop#Dyy-dv!tI39=yYE5SM?V#bZGf?4F} ziV`$^U3nCL&o~6_O*5>*(lrjCTw}j_9Z9{p91u@1WaDRdT|nk1hd-zu$t>000M-~< z(YHz`PE6M6k2L*D-Ic+dVQhN~TaNRqcdGhZH&l{`cQ+PAhNN}uqwHo#hfCH<989|_ zugQ7er#(y>{h@S7RLxj?vERq5S30bxA5xJnb*H{S5mFg?)B3ezoy_E;31?$x_0EB8 zHGAlUmR94Z6kH-f4gpA&u);9_^X-;bFDWvAUlc9=*wCVD`m+lJEWx$!^=YsFkdy*z zAKjy{UObLZnnAMXsf5k+JUW!jwL-LL?dSE$1Z|=cA4`e7^I4F0&4~c#i~h&;CF(ug zqaGXOHy8@Ohg&Vt1Ra~8G^-U-1iib$-V!?l@@g|Cbd8V&wJ{E%S+_Uqh^tE@@jDyJLU$)45uVfhg1#05-ueGV4ek4MV z#MMAJq1!mi-=YWs29K_)6{Q*@AtKhwjH{GAk(h2!h6(0;Y5buV5CNfUBxS8uw~k~` zxb}%RE^%Y%S=>f0Q_xP(**21Sa$Cs!ehE7-3NGkr;mNqBSWdlXbwG9&WIhC_9W2vY za%y!`L@pxp+0k$YwVtUsQDkl=^o)Bs0FeIV@P^R z*Gw)t#($cJ3+=_xb%GOGU+_%IMJVb?5k)u2PmkxP1VX^?;np$25F@?xj{>?MKAa?t zBbZ?}ca*E5VSSiy<$|v+mx}y7>s#}7M+9!Y|J?FG6CrL@NPv4J(VuhY)edddI(1oL z;r2?=4Xs|p*Wp)d8lcr7*Z28>YD@dG`Q6eh0lKNV?BVdt5#N-|}k>=B;yN1m_r~=5c$mhxBU2 zoMlDz+d7$rNK{CE_%&unWIRu|{UJLvQDGqEYmAGqmhc=Z<>@1w%4;cLud$$PlycAp*Q=+1?TQL@cO^Tp9nn78ti6?3+&M!jJ+ zf(U*v_YN_Sye8H@aDmHftc3Z&P<*x5q5%)uwxfMK^m8^RrSL7HZ2bqeP=mlg&Y|YV z1^3iql{A08c#q`+E^AT0jy(H)d2Mzjp{(kATI;2)#Qmdl>v^EPJR8hW&XbiWj2ZUu zeDn!ZY<@xac5@-n?|?67(vpE(WgYf;Dbz!HRt + + + 商品管理 + + + + 扫一扫 + + + + + + 累计收益 (元) + 88 + + + 订单笔数 + 12 + + + + + 昨日收益 (元) + 88 + + + + 今日收益 (元) + 88 + + + \ No newline at end of file diff --git a/pages/index/index/index.wxss b/pages/index/index/index.wxss new file mode 100644 index 0000000..e770b1d --- /dev/null +++ b/pages/index/index/index.wxss @@ -0,0 +1,75 @@ +.head{ + background-color: var(--main-color); + display: flex; + padding:220rpx 0 64rpx 0; +} +.head .items{ + flex:1; + text-align: center; +} +.head .icon{ + width:80rpx;height:80rpx; +} +.head .text{ + font-size: 28rpx; + margin-top:30rpx; +} + +.main{ + background-color: var(--main-bgclolor); + padding:20rpx; + border-radius: 30rpx 30rpx 0 0; + margin-top:-22rpx; +} +.main .row1{ + display: flex; + gap: 20rpx; +} +.main .row1 .cell{ + border-radius: 16rpx; + background-color: #fff; + padding:40rpx 30rpx; + box-sizing: border-box; +} +.main .row1 .title{ + color: #222222; + display: inline-block; +} +.main .row1 .number{ + font-size: 60rpx; + font-weight: 600; + margin-top:40rpx; +} +.main .row1-1{ + flex:1; +} +.main .row1-2{ + width:250rpx;height:220rpx; + text-align: center; +} + +.main .row2{ + display: flex; + background-color: #fff; + border-radius: 16rpx; + margin-top:20rpx; +} +.main .row2 .cell{ + flex:1; + text-align: center; + padding:50rpx 60rpx; +} +.main .row2 .title{ + font-size: 27rpx; + color: #222222; +} +.main .row2 .spliter{ + width:1rpx;height:auto; + background-color:rgba(153, 153, 153, 0.3); + margin:50rpx 0; +} +.main .row2 .number{ + margin-top:40rpx; + font-size: 44rpx; + font-weight: 500; +} \ No newline at end of file diff --git a/pages/order/list/index.js b/pages/order/list/index.js new file mode 100644 index 0000000..5f95b61 --- /dev/null +++ b/pages/order/list/index.js @@ -0,0 +1,89 @@ +import orderApi from '../../../api/order'; +import userApi from '../../../api/user'; + +Page({ + + /** + * 页面的初始数据 + */ + data: { + orderCategory:['及时达','定时达'], + categoryIndex:0, + + list:[{ + status:'PENDING', + packages:[{},{}] + }], + pager:{limit:10,loading:false,loadAll:false,pageIndex:0,refreshTrigger:false}, + + orderStatus:orderApi.status, + genderKV:userApi.genderKV + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + // orderApi.test({ + // community_id:1, + // "user_id":3,"category_id":2,"name":"一乐拉面","business_hours":"08:00 - 21:00","address":"四川省成都市双流区怡心街道天府滨河湾(3号门)","longitude":104.046831,"latitude":30.518607,"phone":"13438370499","brand_image_url":"https://dman-1311994147.cos.ap-chengdu.myqcloud.com/uploads/1/ecb77b5a2d4075f6ff320070ac55f81c085e54b0_1e8ba893-9966-436e-90a4-63361f1fdf79.jpg" + // }) + orderApi.list(); + }, + + changeOrderCategory(event){ + const index = event.currentTarget.dataset.index; + this.setData({ + categoryIndex:index + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/order/list/index.json b/pages/order/list/index.json new file mode 100644 index 0000000..f8fbf2e --- /dev/null +++ b/pages/order/list/index.json @@ -0,0 +1,8 @@ +{ + "usingComponents": { + "nav-bar":"/miniprogram_npm/@beefast-wxmp/nav-bar", + "list-view":"/miniprogram_npm/@beefast-wxmp/list-view", + "swipe-button":"/miniprogram_npm/@beefast-wxmp/swipe-button" + }, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/order/list/index.wxml b/pages/order/list/index.wxml new file mode 100644 index 0000000..76ea08b --- /dev/null +++ b/pages/order/list/index.wxml @@ -0,0 +1,87 @@ + + + {{item}} + + + + 待接单(0) + 待配送(0) + 已送达(0) + + + + + + + + + + + 自营商品 + + 剩余(19:30前送达) + + + + + 家庭私厨烤串【鲜货】 + x 1 + + 9.9 + + + 佳兆业丽晶公馆3栋2单元2702 + + {{'仙人模斗'}}{{genderKV['MALE']}}:{{'13438370499'}} + + + + + + + + + + 【】加价金额: + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/order/list/index.wxss b/pages/order/list/index.wxss new file mode 100644 index 0000000..f2a9161 --- /dev/null +++ b/pages/order/list/index.wxss @@ -0,0 +1,286 @@ +.order-category{ + background-color: rgba(153, 153, 153, 0.3); + display: flex; + border-radius: 12rpx; + position: relative; + padding:0 12rpx; +} +.order-category::before{ + content: ''; + position: absolute; + top:6rpx;bottom:6rpx; + width:140rpx; + background-color: #fff; + border-radius: 8rpx; + transition-duration: .4s; + /* transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1); */ + transition-timing-function:cubic-bezier(.26,.9,.31,.97); +} +.order-category.active0::before{ + right:auto;left:6rpx; +} +.order-category.active1::before{ + left:126rpx; +} +.order-category .item{ + padding:16rpx 22rpx; + position: relative; + white-space: nowrap; + font-size: 28rpx; +} +.order-category .item.current{ + font-weight: 600; +} + +.top-bar{ + display: flex; + justify-content: space-between; + padding:40rpx 0; +} +.top-bar .item{ + font-size: 28rpx; + padding:0 50rpx +} +.top-bar .item.current{ + font-weight: 500; + font-size: 32rpx; +} + +.search{ + margin:0 16rpx; + background-color: #fff; + padding:10rpx 10rpx 10rpx 40rpx; + display: flex; + align-items: center; + border-radius: 60rpx; +} +.search .input{ + flex:1; + height:56rpx; +} +.search .button{ + border-radius: 60rpx; + font-size: 28rpx; + padding:14rpx 30rpx; + line-height: 1; + font-weight: normal; + background-color: rgba(153, 153, 153, 0.3); +} + + + +.package-list .item{ + margin:16rpx; + background-color: #ffffff; + border-radius: 18rpx; + color: #555555; + padding:20rpx; + position: relative; +} +.package-list .item .item-head{ + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom:50rpx; +} +.package-list .item .item-head .tag{ + background-color: rgba(153, 153, 153, 0.1); + border-radius: 12rpx; + padding:16rpx 20rpx; + font-weight: 500; + color:#555555; +} +.package-list .item .item-head .deliver-time{ + color:#222222; +} +.package-list .item .item-head .time{ + color:#ff0000; + font-weight: 500; +} +.package-list .item::before{ + content: ''; + position: absolute; + width:1.2rpx; + background-color: rgba(85, 85, 85, 0.5); + left:38.5rpx;top:160rpx; + bottom:250rpx; +} +.package-list .item.has-markup::before{ + bottom:200rpx; +} +.package-list .item.no-btns::before{ + bottom:100rpx; +} +.package-list .item.no-btns.has-markup::before{ + bottom:50rpx; +} +.package-list .item .name{ + font-size: 40rpx; + display: flex; + white-space: nowrap; +} +.package-list .item .name .text{ + overflow: hidden; + text-overflow: ellipsis; + font-weight: 600; + flex:1; +} +.package-list .item .received-status{ + border-left: 1rpx solid #999999; + padding-left:18rpx; + color:var(--main-color); +} +.package-list .item .received-status.done{ + color:unset; +} +.package-list .item .merchant{ + position: relative; + padding-left:64rpx; + padding-bottom:80rpx; +} +.package-list .item .merchant .money{ + font-size: 40rpx; + margin-top:24rpx; +} +.package-list .item .merchant::before{ + position: absolute; + left:12rpx;top:12rpx; + width:16rpx;height:16rpx; + content: ''; + background-color: #555555; + border-radius: 50%; + display: inline-block; +} + +.package-list .item .merchant::before, +.package-list .item .address::before, +.package-list .item .markup .mu-item::before{ + position: absolute; + content: '商'; + left:0;top:0; + width:40rpx;height:40rpx; + color:#fff; + font-size: 24rpx; + text-align: center; + line-height: 40rpx; + border-radius: 50%; +} + +.package-list .item .address::before{ + content: '送'; + background-color: var(--main-color); +} +.package-list .item .markup{ + font-size: 34rpx; + line-height: 40rpx; + padding-bottom:20rpx; + color: var(--main-font-color); +} +.package-list .item .markup .bold{ + font-weight: 500; +} +.package-list .item .markup .mu-item{ + padding-left:48rpx; + position: relative; + display: flex; + align-items: center; + margin-top:30rpx; +} +.package-list .item .markup .mu-item::before{ + content: '加'; + background-color:#ff0000; +} + +/* .package-list .item .package .value{ + flex:1; + display: flex; + flex-wrap: wrap; + gap: 16rpx; +} */ + +.package-list .item .address{ + padding-left:64rpx; + position: relative; + padding-bottom:20rpx; +} +.package-list .item .address .title{ + color:var(--main-font-color); + font-size: 40rpx; + font-weight: 600; +} +.package-list .item .address .sub-title{ + font-size: 32rpx; + margin-top:14rpx; + display:flex; + justify-content: space-between; + align-items: center; +} +.package-list .item .address .sub-title .make-phone-tap-area{ + padding:10rpx +} +.package-list .item .address .sub-title .make-phone{ + border:1.2rpx solid rgba(254, 196, 0, 0.5); + border-radius: 50%; + color: rgb(255, 195, 0); + padding:10rpx; + font-size:24rpx; +} +.package-list .item.is-new-order .address .sub-title::before{ + content:'新'; + background-color:#ff0000; + color:#fff; + font-size: 24rpx; + margin-right: 12rpx; + border-radius: 8rpx; + padding:6rpx 8rpx; +} + +.package-list .item .btns{ + display: flex; + gap:24rpx; + margin-top:30rpx; + +} +.package-list .item .btns .button{ + height:96rpx; + line-height: 1; + border-radius: 12rpx; + border: 1.2px solid rgba(85, 85, 85, 0.5); + color: #555555; + font-weight: normal; + padding:30rpx 40rpx; + margin:0; +} +.package-list .item .btns .more-btn{ + width:200rpx; + display: flex; + align-items: center; + justify-content: center; +} +.package-list .item .btns .more-btn .icon, +.package-list .item .btns .more-btn .icon::before, +.package-list .item .btns .more-btn .icon::after{ + width:16rpx;height:16rpx; + background: #555555; + border-radius: 50%; + position: relative; + overflow: visible; +} +.package-list .item .btns .more-btn .icon::before{ + content:''; + position:absolute; + left:-36rpx;top:0; +} +.package-list .item .btns .more-btn .icon::after{ + content:''; + position:absolute; + left:36rpx;top:0; +} +.package-list .item .btns .more-btn[disabled]{ + color:#999; + border-color:rgb(221, 219, 219); +} +.package-list .item .btns .swipe-button{ + height:96rpx; + flex:1; +} \ No newline at end of file diff --git a/pages/product/list/index.js b/pages/product/list/index.js new file mode 100644 index 0000000..bcb7dc5 --- /dev/null +++ b/pages/product/list/index.js @@ -0,0 +1,66 @@ +// pages/product/list/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/product/list/index.json b/pages/product/list/index.json new file mode 100644 index 0000000..a823795 --- /dev/null +++ b/pages/product/list/index.json @@ -0,0 +1,6 @@ +{ + "usingComponents": { + "list-view":"/miniprogram_npm/@beefast-wxmp/list-view" + }, + "navigationBarTitleText": "商品列表" +} \ No newline at end of file diff --git a/pages/product/list/index.wxml b/pages/product/list/index.wxml new file mode 100644 index 0000000..a1b70cf --- /dev/null +++ b/pages/product/list/index.wxml @@ -0,0 +1,53 @@ + + + + + + 家庭私厨烤串【鲜货】 + 及时达丨配送 + 9.9 + + + + + 0.0 + 累计销售额 (元) + + + 0.0 + 累计收益(元) + + + 1/4 + 已售出/库存量 + + + + + + + + + + + 家庭私厨烤串【鲜货】 + 及时达丨配送 + 9.9 + + + + + 0.0 + 累计销售额 (元) + + + 0.0 + 累计收益(元) + + + 1/4 + 已售出/库存量 + + + + \ No newline at end of file diff --git a/pages/product/list/index.wxss b/pages/product/list/index.wxss new file mode 100644 index 0000000..0bad7ae --- /dev/null +++ b/pages/product/list/index.wxss @@ -0,0 +1,73 @@ +.product-list .item{ + background-color: #fff; + margin:20rpx; + padding:30rpx; + border-radius: 18rpx; +} +.product-list .item .info{ + display: flex; +} +.product-list .item .avatar{ + width:180rpx;height:140rpx; + border-radius: 10rpx; + position: relative; +} +.product-list .item.off .avatar::before{ + content: '已下架'; + position: absolute; + width:100%;height:100%; + background-color: rgba(0, 0, 0, .5); + color: #fff; + display: flex; + align-items: center; + justify-content: center; + font-size: 28rpx; + font-weight: 500; +} +.product-list .item .right{ + margin-left:20rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + height: 140rpx; +} +.product-list .item .name{ + font-weight: 500; + font-size: 32rpx; +} +.product-list .item .tags{ + color:#555; + font-size:26rpx; +} + +.product-list .item .stat{ + display: flex; + justify-content: space-between; + padding:40rpx 0 60rpx 0; +} +.product-list .item .s-item{ + text-align: center; +} +.product-list .item .s-item .key{ + margin-top:20rpx; + font-size: 26rpx; + color: #555; +} +.product-list .item .s-item .value{ + font-size: 40rpx; + font-weight: 600; +} + +.actions{ + display: flex; + justify-content: flex-end; + gap: 20rpx; +} +.actions .button{ + background-color: #000; + font-size: 28rpx; + color:#fff; + padding:18rpx 52rpx; + line-height: 1; + margin:0; +} \ No newline at end of file diff --git a/pages/user/index/index.js b/pages/user/index/index.js new file mode 100644 index 0000000..4555781 --- /dev/null +++ b/pages/user/index/index.js @@ -0,0 +1,66 @@ +// pages/user/index/index.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/user/index/index.json b/pages/user/index/index.json new file mode 100644 index 0000000..965b8e8 --- /dev/null +++ b/pages/user/index/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/user/index/index.wxml b/pages/user/index/index.wxml new file mode 100644 index 0000000..54d1636 --- /dev/null +++ b/pages/user/index/index.wxml @@ -0,0 +1,25 @@ + + + + 仙人模斗 + + + + + + 在线客服 + + + + 修改密码 + + + + 用户协议 + + + + 语音播报 + + + \ No newline at end of file diff --git a/pages/user/index/index.wxss b/pages/user/index/index.wxss new file mode 100644 index 0000000..ee6a202 --- /dev/null +++ b/pages/user/index/index.wxss @@ -0,0 +1,51 @@ +.head{ + background-color: var(--main-color); + height:480rpx; + position: relative; + border-radius: 0 0 40rpx 40rpx; +} +.head .user{ + display: flex; + align-items: center; + position: absolute; + bottom:144rpx; + font-size: 36rpx; + padding:0 40rpx; +} +.head .user .avatar{ + width:120rpx;height:120rpx; + border:3rpx solid #fff; + border-radius: 50%; + margin-right: 28rpx; +} + +.actions{ + display: flex; + align-items: center; + justify-content: space-between; + padding:48rpx 0; + margin-top:-120rpx; + position: relative; +} +.actions .item{ + padding:0 50rpx; + text-align: center; +} +.actions .icon{ + width:56rpx;height:56rpx; +} +.actions .text{ + margin-top:40rpx; +} + +.bg-notice{ + display:flex; + align-items: center; + justify-content: space-between; +} +.btn-logout{ + margin:20rpx!important; + background-color: #fff!important; + font-weight: normal; + color: #555555; +} \ No newline at end of file diff --git a/pages/user/login/index.js b/pages/user/login/index.js new file mode 100644 index 0000000..ed17760 --- /dev/null +++ b/pages/user/login/index.js @@ -0,0 +1,137 @@ +import userApi from '../../../api/user'; +import {validateForm} from '../../../utils/util'; + +const app = getApp(); + +Page({ + + /** + * 页面的初始数据 + */ + data: { + phone:'', + password:'', + logining:false, + isAgree:false, + isEyesOpen:false, + appConfig:{} + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.validator = { + phone:{type:'phone',message:'请输入正确的手机号',shake:true,autoFocus:true}, + password:{minLength:6,message:'请输入 6 位数密码',shake:true,autoFocus:true} + } + app.getAppConfig().then((data)=>{ + this.setData({ + appConfig:data + }) + }) + }, + login(){ + if(this.data.isAgree){ + const valid = validateForm(this.validator,this); + console.log(valid,this.validator); + if(valid.length==0){ + this.setData({ + logining:true + }) + userApi.login(this.data.phone,this.data.password).then((data)=>{ + this.setData({ + logining:false + }) + app.globalData.userInfo = data.user; + app.globalData.accessToken = data.access_token; + wx.setStorage({ + key:'accessToken', + data:data.access_token, + success:()=>{ + wx.reLaunch({ + url: '/pages/index/index/index', + }) + } + }) + }).catch(()=>{ + console.log('catch'); + this.setData({ + logining:false + }) + }) + } + }else{ + validateForm({ + shake:{required:true,shake:true} + },this); + } + }, + handleAgreeChange(event){ + this.setData({ + isAgree:!!event.detail + }) + }, + toggleEyes(){ + this.setData({ + isEyesOpen:!this.data.isEyesOpen + }) + }, + navToAgreement(){ + wx.navigateTo({ + url: `/pages/browser/index?url=${encodeURIComponent(this.data.appConfig.url_user_agreement)}`, + }) + }, + navToPrivacy(){ + wx.navigateTo({ + url: `/pages/browser/index?url=${encodeURIComponent(this.data.appConfig.url_user_privacy)}`, + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/user/login/index.json b/pages/user/login/index.json new file mode 100644 index 0000000..965b8e8 --- /dev/null +++ b/pages/user/login/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationStyle": "custom" +} \ No newline at end of file diff --git a/pages/user/login/index.wxml b/pages/user/login/index.wxml new file mode 100644 index 0000000..f5b35fa --- /dev/null +++ b/pages/user/login/index.wxml @@ -0,0 +1,36 @@ + diff --git a/pages/user/login/index.wxss b/pages/user/login/index.wxss new file mode 100644 index 0000000..2a4965b --- /dev/null +++ b/pages/user/login/index.wxss @@ -0,0 +1,95 @@ +.login{ + background-color: #fff; + height:100vh; +} +.login .head{ + background-color: var(--main-color); + position: relative; + height:554rpx; +} +.login .head .bg{ + width: 450rpx;height:486rpx; + position: absolute; + right:-40rpx;top:204rpx; +} +.login .head .title{ + font-size: 40rpx; + position: absolute; + left:40rpx; + font-weight: 500; + bottom:140rpx; + display: flex; + align-items: center; +} +.login .head .title .t-logo{ + height: 36rpx; + margin-left: 10rpx; +} +.login .head .logo{ + position: absolute; + width: 136rpx;height: 136rpx; + bottom:218rpx;left:54rpx; +} +.login .input-area{ + border-radius: 30rpx 30rpx 0px 0px; + margin-top:-80rpx; + background-color: #fff; + position: relative; + padding:16rpx 50rpx 40rpx 50rpx; +} +.input-container{ + display: flex; + align-items: center; + background-color:#F7F7F7; + border-radius: 18rpx; + margin-top:24rpx; + padding-left:30rpx; +} +.login .input-area .input{ + height: 100rpx; + font-weight: 500; + font-size: 36rpx; +} +.login .input-area .ph-class{ + font-weight: normal; + font-size: 32rpx; +} +.input-container .input{ + flex: 1; +} +.input-container .icon{ + width:44rpx;height:44rpx; + padding:20rpx; +} +.login .input-area .input.error{ + background-color: rgb(252, 198, 198); +} + +.login .input-area .forgot-pwd{ + display:flex; + justify-content: flex-end; +} +.login .input-area .forgot{ + color:#888888; + font-size:24rpx; + padding:30rpx 0 30rpx 30rpx; +} + +.login .input-area .button{ + border-radius: 20rpx; +} + +.agree{ + font-size: 28rpx; + margin-top:50rpx; + text-align: center; +} +.agree .yellow{ + color:var(--main-color); + margin: 0; +} +.agree .policy{ + display: inline-flex; + align-items: center; +} + diff --git a/pages/user/password/index.js b/pages/user/password/index.js new file mode 100644 index 0000000..95da082 --- /dev/null +++ b/pages/user/password/index.js @@ -0,0 +1,165 @@ +const app = getApp(); +import userApi from '../../../api/user'; +Page({ + + verifyCodeTimer:null, + /** + * 页面的初始数据 + */ + data: { + phone:'', + isLogin:false, + verifyCode:'', + password:'', + rePassword:'', + codeLoading:false, + getCodeBtnText:'获取验证码', + waitingTime:app.verifyCodeWaitingTime, + modifyLoading:false + }, + validator:{ + phone:{ + type:'phone',autoFocus:true,shake:true,message:'请输入正确的手机号码' + }, + verifyCode:[ + {required:true,message:'请输入验证码',shake:true,autoFocus:true}, + // {length:6,message:'请输入 6 位数验证码',shake:true,autoFocus:true} + ], + password:{minLength:6,message:'请输入至少 6 位新密码',shake:true,autoFocus:true}, + rePassword:{minLength:true,message:'请输入确认新密码',shake:true,autoFocus:true}, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + phone:app.globalData.userInfo?.phone||'', + isLogin:!!app.globalData.userInfo?.phone + }) + let time = wx.getStorageSync('password-verify-code-time'); + if(time){ + let remainTime = app.verifyCodeWaitingTime*1000 - ((new Date()).getTime() - time); + if(remainTime>0){ + this.setData({ + waitingTime:parseInt(remainTime/1000), + codeLoading:true + }) + this.startTimer(); + }else{ + wx.removeStorageSync('password-verify-code-time') + } + } + }, + getVerifyCode(){ + if(this.data.codeLoading)return; + this.setData({ + codeLoading:true + }); + userApi.verifyCode(this.data.phone).then((data)=>{ + this.setData({ + getCodeBtnText:`${this.data.waitingTime}S` + }); + + const time = new Date(); + wx.setStorageSync('password-verify-code-time', time.getTime()); + this.startTimer(); + }) + }, + startTimer(){ + if(this.data.waitingTime<=0){ + this.setData({ + codeLoading:false, + getCodeBtnText:'获取验证码', + waitingTime:app.verifyCodeWaitingTime + }); + wx.removeStorageSync('password-verify-code-time') + }else{ + this.setData({ + getCodeBtnText:`${this.data.waitingTime--}S` + }); + this.verifyCodeTimer = setTimeout(this.startTimer,1000); + } + }, + save(){ + if(this.data.modifyLoading)return; + const valid = app.validateForm(this.validator,this); + if(valid.length==0){ + if(this.data.password==this.data.rePassword){ + this.setData({ + rePasswordMessage:'' + }); + this.setData({ + modifyLoading:true + }); + userApi.modifyPassword(this.data.phone,this.data.rePassword,this.data.verifyCode).then((data)=>{ + wx.navigateBack({ + success(){ + wx.showToast({ + icon:'success', + title: '修改成功', + }) + } + }) + }).catch(()=>{ + console.log(11111,'errro'); + this.setData({ + modifyLoading:false + }) + }) + }else{ + this.setData({ + rePasswordMessage:'两次密码不一致' + }) + } + } + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + clearTimeout(this.verifyCodeTimer); + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/user/password/index.json b/pages/user/password/index.json new file mode 100644 index 0000000..7c6e72b --- /dev/null +++ b/pages/user/password/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "修改密码" +} \ No newline at end of file diff --git a/pages/user/password/index.wxml b/pages/user/password/index.wxml new file mode 100644 index 0000000..5770f54 --- /dev/null +++ b/pages/user/password/index.wxml @@ -0,0 +1,41 @@ + + + 手机号码 + + + {{phoneMessage}} + + + + 验证码 + + + {{verifyCodeMessage}} + + + + + + + 新密码 + + + {{passwordMessage}} + + + + 确认新密码 + + + {{rePasswordMessage}} + + + + \ No newline at end of file diff --git a/pages/user/password/index.wxss b/pages/user/password/index.wxss new file mode 100644 index 0000000..4013f42 --- /dev/null +++ b/pages/user/password/index.wxss @@ -0,0 +1,15 @@ +.verify-btn{ + font-weight: normal; +} +.verify-btn[disabled]{ + background-color: #fff; + border: 2rpx solid var(--main-color); + color:var(--main-color)!important; +} + +.cells .cell-hd{ + width:155rpx; +} +.save-btn{ + margin:60rpx 30rpx 30rpx!important; +} \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..90d677f --- /dev/null +++ b/project.config.json @@ -0,0 +1,41 @@ +{ + "appid": "wx786f8357a4a09fd1", + "compileType": "miniprogram", + "libVersion": "trial", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "compileWorklet": false, + "uglifyFileName": false, + "uploadWithSourceMap": true, + "packNpmManually": true, + "minifyWXSS": true, + "minifyWXML": true, + "localPlugins": false, + "condition": false, + "swc": false, + "disableSWC": true, + "disableUseStrict": false, + "useCompilerPlugins": false + }, + "condition": {}, + "editorSetting": { + "tabIndent": "auto", + "tabSize": 2 + }, + "simulatorPluginLibVersion": {} +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..65c48c5 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,23 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "beefast-mini-merchant", + "setting": { + "compileHotReLoad": true, + "skylineRenderEnable": true, + "urlCheck": true, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "preloadBackgroundData": false, + "autoAudits": false, + "useApiHook": true, + "useApiHostProcess": true, + "showShadowRootInWxmlPanel": true, + "useStaticServer": false, + "useLanDebug": false, + "showES6CompileOption": false, + "bigPackageSizeSupport": false, + "checkInvalidKey": true, + "ignoreDevUnusedFiles": true + }, + "libVersion": "3.7.11" +} \ 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/utils/util.js b/utils/util.js new file mode 100644 index 0000000..6ba145f --- /dev/null +++ b/utils/util.js @@ -0,0 +1,95 @@ +const formatTime = date => { + 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}` +} + +const validateForm = (rules,page)=>{ + const result = []; + for(var key in rules){ + ((rules[key] instanceof Array)?rules[key]:[rules[key]]).map((item)=>{ + let valid = true; + let value = page.data[key]; + if(typeof value=='string'){ + value = value.trim(); + } + //非空 + if(item.required){ + if(!value){ + valid = false; + } + }else if(item.length){ + //绝对长度 + if(value.length!=item.length){ + valid = false; + } + }else if(item.type=='phone'){ + if(value.length!=11){ + valid = false; + } + }else if(item.maxLength||item.minLength){ + if(value.length>(item.maxLength||Infinity)||value.lengthitem.autoFocus); + if(focusInput){ + page.setData({ + [`${focusInput.key}Focus`]:true + }) + } + const shakeInput = result.find((item)=>item.shake); + if(shakeInput){ + if(!shakeInput.animation){ + shakeInput.animation = wx.createAnimation({ + duration: 20, + }) + } + shakeInput.animation.translateX(10).step(); + shakeInput.animation.translateX(-10).step(); + shakeInput.animation.translateX(10).step(); + shakeInput.animation.translateX(-10).step(); + shakeInput.animation.translateX(5).step(); + shakeInput.animation.translateX(0).step(); + // needSetData[`${key}Animation`] = item.animation.export(); + page.setData({ + [`${shakeInput.key}Animation`]:shakeInput.animation.export() + }) + } + return result; +} + +module.exports = { + formatTime, + validateForm +}