From a9588815b88415123b89c4f085429636bb588826 Mon Sep 17 00:00:00 2001 From: zhangjing Date: Wed, 12 Jul 2023 17:56:36 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BD=93=E9=AA=8C=E5=AE=98=E6=B4=BB=E5=8A=A8]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/interfaces/recruit.js | 44 ++- api/request.js | 8 +- app.js | 17 +- app.json | 4 +- pages/index-老版/assess/assess.js | 4 - pages/index-老版/index.js | 24 +- pages/index/assess/assess.js | 29 +- pages/index/index.js | 23 -- pages/login/index.js | 44 ++- pages/pay/index.js | 28 +- pages/recruit/index.js | 159 +++++++++- pages/recruit/index.wxml | 239 +++++++++++--- pages/recruit/index.wxss | 412 ++++++++++++++++++++++++- pages/recruit/referto/referto.js | 7 +- pages/recruit/signWrite/signWrite.js | 143 +++++++++ pages/recruit/signWrite/signWrite.json | 4 + pages/recruit/signWrite/signWrite.wxml | 67 ++++ pages/recruit/signWrite/signWrite.wxss | 236 ++++++++++++++ pages/recruit/writeList/writeList.js | 70 +++++ pages/recruit/writeList/writeList.json | 3 + pages/recruit/writeList/writeList.wxml | 59 ++++ pages/recruit/writeList/writeList.wxss | 159 ++++++++++ pages/report/index.js | 29 +- project.private.config.json | 4 +- static/icons/circle_add.png | Bin 0 -> 2634 bytes static/icons/drop.png | Bin 0 -> 1873 bytes static/icons/flat.png | Bin 0 -> 1283 bytes static/icons/uricacidClose.png | Bin 0 -> 449 bytes static/imgs/weChat_code.jpg | Bin 0 -> 7963 bytes 29 files changed, 1599 insertions(+), 217 deletions(-) create mode 100644 pages/recruit/signWrite/signWrite.js create mode 100644 pages/recruit/signWrite/signWrite.json create mode 100644 pages/recruit/signWrite/signWrite.wxml create mode 100644 pages/recruit/signWrite/signWrite.wxss create mode 100644 pages/recruit/writeList/writeList.js create mode 100644 pages/recruit/writeList/writeList.json create mode 100644 pages/recruit/writeList/writeList.wxml create mode 100644 pages/recruit/writeList/writeList.wxss create mode 100644 static/icons/circle_add.png create mode 100644 static/icons/drop.png create mode 100644 static/icons/flat.png create mode 100644 static/icons/uricacidClose.png create mode 100644 static/imgs/weChat_code.jpg diff --git a/api/interfaces/recruit.js b/api/interfaces/recruit.js index 68a8f4f..179c9cd 100644 --- a/api/interfaces/recruit.js +++ b/api/interfaces/recruit.js @@ -12,8 +12,9 @@ const index = data => req({ }) // 申请前置接口 -const Enroll = (experience_id) => req({ - url : "experiences/enroll/" + experience_id +const Enroll = (experience_id, data) => req({ + url : "experiences/enroll/" + experience_id, + data: data }) // 申请前置接口 @@ -23,8 +24,45 @@ const recruitAdd = (data) => req({ data: data }) +//小程序入库用户数据(微信授权) +const wechatMini = (data) => req({ + url : "user/socialite/login/wechat/mini/add", + method: "POST", + data: data +}) + +// 活动打卡日历 +const signCalendar = (data) => req({ + url : "experiences/sign_calendar", + data: data +}) + +// 活动打卡操作 +const signLabor = (data) => req({ + url : "experiences/signs", + method: "POST", + data: data +}) + +// 打卡记录 +const signList = (data) => req({ + url : "experiences/signs", + data: data +}) + +// 体验官第一次和第二次比对 +const skinDiff = (data) => req({ + url : "ai/skin/diff", + data: data +}) + export default ({ index, Enroll, - recruitAdd + recruitAdd, + wechatMini, + signCalendar, + signLabor, + signList, + skinDiff }) \ No newline at end of file diff --git a/api/request.js b/api/request.js index c2e3077..950802d 100644 --- a/api/request.js +++ b/api/request.js @@ -9,8 +9,9 @@ import {updToken} from './updateToken' // 请求方式配置 // https://api.shui.shuiganying.com/api //正式地址 // https://shuitest.shuiganying.com/api //测试地址 -// wx6bd4fcc040bfa025 正式appid -// wx3056ec23196eaf02 测试appid +// wx6bd4fcc040bfa025 水感应 正式appid +// wx9ae0c63d0c58caeb 测试appid 三猿 +// wx3056ec23196eaf02 水感应 测试 // const api = "https://api.shui.shuiganying.com/api/" // 正式环境 const api = "https://shuitest.shuiganying.com/api/" // 测试环境 const header = { @@ -91,6 +92,9 @@ const req = (obj, noToken) => { */ const upload = (obj) => { + + console.log(obj) + // header header.Authorization = wx.getStorageSync("token") || "" // 处理上传信息 diff --git a/app.js b/app.js index 8048a6b..73ec06c 100644 --- a/app.js +++ b/app.js @@ -45,6 +45,18 @@ App({ } }) + if(wx.getStorageSync("openid") == '') { + // 获取code + wx.login({ + success: res => { + // 存储openid + api.auth.codeOpenid({code: res.code}).then(openidRes => { + wx.setStorageSync('openid', openidRes.data) + }).catch(err => {}) + } + }) + } + // 挂载api wx.$api = api }, @@ -52,7 +64,8 @@ App({ isUser : false, userInfo : null, barHeight : '', - inviteText : '', // 邀请好友临时存储 - isExperience: '' // 体验官身份 + inviteText : '', // 邀请好友临时存储 + isExperience: '', // 体验官身份 + experienceAreaId: '' // 体验官区域 } }) \ No newline at end of file diff --git a/app.json b/app.json index 22c354d..c74c359 100644 --- a/app.json +++ b/app.json @@ -31,7 +31,9 @@ "pages/mall/webView/webView", "pages/order/logistic/logistic", "pages/recruit/index", - "pages/recruit/referto/referto" + "pages/recruit/referto/referto", + "pages/recruit/signWrite/signWrite", + "pages/recruit/writeList/writeList" ], "window": { "backgroundTextStyle": "light", diff --git a/pages/index-老版/assess/assess.js b/pages/index-老版/assess/assess.js index 069e0c4..90468cd 100644 --- a/pages/index-老版/assess/assess.js +++ b/pages/index-老版/assess/assess.js @@ -6,7 +6,6 @@ Page({ data: { barHeight : getApp().globalData.barHeight, // 状态栏高度 - openId : '', nameValue : '', // 姓名 nameStatus: false, // 姓名填写弹框 Analyze : '', // 是否交钱 @@ -16,9 +15,6 @@ Page({ }, onLoad(options) { - this.setData({ - openId: options.code - }) }, onShow() { diff --git a/pages/index-老版/index.js b/pages/index-老版/index.js index 7e372f5..121058e 100644 --- a/pages/index-老版/index.js +++ b/pages/index-老版/index.js @@ -5,8 +5,6 @@ Page({ data: { - payCode : '', // code获取openid - openId : '', // openid disabled : false, // 支付按钮 payStatus : false, // 支付弹框 catchtouchmove: false @@ -16,26 +14,6 @@ Page({ 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 => {}) }, /** @@ -44,7 +22,7 @@ Page({ assessGo(){ if(wx.getStorageSync("token") != ''){ wx.navigateTo({ - url: '/pages/index/assess/assess?code=' + this.data.openId + url: '/pages/index/assess/assess?code=' + wx.getStorageSync("openid") }) return } diff --git a/pages/index/assess/assess.js b/pages/index/assess/assess.js index dfe348f..87d759b 100644 --- a/pages/index/assess/assess.js +++ b/pages/index/assess/assess.js @@ -6,7 +6,6 @@ Page({ data: { barHeight : getApp().globalData.barHeight, // 状态栏高度 - openId : '', nameValue : '', // 姓名 testTitle : '', nameStatus : false, // 姓名填写弹框 @@ -20,19 +19,8 @@ Page({ onLoad(options) { // 体验官 type=1或者type=2 直接面检,不用交钱 this.setData({ - refertoType: options.type + refertoType: options.type || 0 }) - this.setData({ - openId: options.code - }) - if(options) { - wx.login({ - success: res => { - // 获取openid - this.openInfo(res.code) - } - }) - } }, onShow() { @@ -47,18 +35,6 @@ Page({ this.ifAnalyze(); }, - - /** - * openid - */ - openInfo(code) { - wx.$api.auth.codeOpenid({code: code}).then(res => { - this.setData({ - openId: res.data - }) - }).catch(err => {}) - }, - /** * 是否可检测 */ @@ -192,11 +168,12 @@ Page({ * 确认支付1元 */ payBtn(orderid) { + wx.showLoading({ title: '支付中...', mask : true }) - wx.$api.index.skinPay(orderid,{type: 'miniapp', openid: this.data.openId}).then(res=>{ + wx.$api.index.skinPay(orderid,{type: 'miniapp', openid: wx.getStorageSync("openid")}).then(res=>{ wx.hideLoading() let payInfo = JSON.parse(res.data.wechat) wx.requestPayment({ diff --git a/pages/index/index.js b/pages/index/index.js index 35db3a7..e3ef5e8 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -5,8 +5,6 @@ Page({ data: { - payCode : '', // code获取openid - openId : '', // openid userLogin : false, // 是否登录 testTitle : '', // 检测文字 disabled : false, // 支付按钮 @@ -21,16 +19,6 @@ Page({ }, onShow() { - wx.login({ - success: res => { - this.setData({ - payCode: res.code - }) - // 获取openid - this.openInfo() - } - }) - // 获取登录状态 if(wx.getStorageSync("token") != ''){ this.setData({ @@ -46,17 +34,6 @@ Page({ }) }, - /** - * openid - */ - openInfo() { - wx.$api.auth.codeOpenid({code: this.data.payCode}).then(res => { - this.setData({ - openId: res.data - }) - }).catch(err => {}) - }, - /** * 是否可检测 */ diff --git a/pages/login/index.js b/pages/login/index.js index 55c5d32..7e451a9 100644 --- a/pages/login/index.js +++ b/pages/login/index.js @@ -19,7 +19,21 @@ Page({ onShow() { // 获取code - this.gainCode(); + wx.login({ + success: res => { + this.setData({ + loginCode : res.code + }) + } + }) + }, + + + /** + * openid + */ + openInfo(code) { + }, /** @@ -36,8 +50,6 @@ Page({ * 微信授权手机号码 */ userPhone(e){ - // 获取code - this.gainCode(); if(e.detail.errMsg == "getPhoneNumber:ok"){ this.setData({ loading: true @@ -53,16 +65,6 @@ Page({ this.setData({ loading: false }) - // 登录过期重新获取code - wx.login({ - success: res=>{ - this.setData({ - loginCode: res.code - }) - // 登录 - this.userLogin(iv,enData) - } - }) } }) }else{ @@ -84,6 +86,9 @@ Page({ invite : getApp().globalData.inviteText || '', is_experience : getApp().globalData.isExperience || '' }).then(res=>{ + // 存储openid + wx.setStorageSync('openid', res.data.openid) + // 存储登录信息 wx.setStorage({ key : 'token', @@ -109,19 +114,6 @@ Page({ }).catch(err=>{}) }, - /** - * 获取code - */ - gainCode() { - wx.login({ - success: res => { - this.setData({ - loginCode : res.code - }) - } - }) - }, - // 勾选协议 radioChange() { this.setData({ diff --git a/pages/pay/index.js b/pages/pay/index.js index 704fcf9..cdac2b5 100644 --- a/pages/pay/index.js +++ b/pages/pay/index.js @@ -5,8 +5,6 @@ Page({ data: { - payCode : '', // code获取openid - openId : '', // openid orderNo : '', // 订单编号 total : '', // 订单金额 paySuccess : false, // 兑换成功显示 @@ -20,29 +18,7 @@ Page({ }) }, - 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 => {}) - }, + onShow() {}, /** * 确认支付 @@ -53,7 +29,7 @@ Page({ mask : true }) let that = this - wx.$api.mall.mallPay(this.data.orderNo,{type: 'miniapp', openid: this.data.openId}).then(res=>{ + wx.$api.mall.mallPay(this.data.orderNo,{type: 'miniapp', openid: wx.getStorageSync("openid")}).then(res=>{ wx.hideLoading() this.setData({ disabled: false diff --git a/pages/recruit/index.js b/pages/recruit/index.js index dc7af11..62f8936 100644 --- a/pages/recruit/index.js +++ b/pages/recruit/index.js @@ -4,7 +4,20 @@ Page({ * 页面的初始数据 */ data: { - recruitData: '' + recruitData : '', + type : 'flowPath', //flowPath 参与流程 clockIn 打卡 + + followState : false, + loginCode : '', + + calendarData : [], //日历表 + canSign : '', //是否可以签到 + selectMonth : '', //当前月 + lastMonth : '', //选择下个月 + nextMonth : '', //选择上个月 + signDayNumber : '', //累计打卡天数 + signDayCount : '', //总打卡天数 + signWaterNumber: '', //总打卡给水滴 }, /** @@ -18,12 +31,23 @@ Page({ if(options.is_experience != undefined) { getApp().globalData.isExperience = options.is_experience } + if(options.experience_area_id != undefined) { + getApp().globalData.experienceAreaId = options.experience_area_id + } }, /** * 生命周期函数--监听页面显示 */ onShow() { + wx.login({ + success: res => { + this.setData({ + loginCode: res.code + }) + } + }) + // 获取体验官首页 this.recruitInfo(); }, @@ -39,6 +63,25 @@ Page({ this.setData({ recruitData: res.data }) + + // 0可以申请 1需要面检测 5签收-查看物流 6打卡 7第二次面 + if(res.data.can.status == 6) { + // 获取日历 + this.signInfo(); + + // 显示打卡数据 + this.setData({ + type : 'clockIn' + }) + } + + // if(res.data.can.status == 7) { + // // 获取两次报告对比 + // this.skinInfo(); + // } + + // 获取两次报告对比 + this.skinInfo(); }).catch(err => {}) }, @@ -47,11 +90,22 @@ Page({ */ applyGo() { if(wx.getStorageSync("token") != ''){ + // 0可以申请 1需要面检测 5签收-查看物流 6打卡 7第二次面 if(this.data.recruitData.can.status == 0) { + // 申请体验官 wx.navigateTo({ url: './referto/referto?id=' + this.data.recruitData.experience_id }) - } else{ + } else if(this.data.recruitData.can.status == 5) { + var data = JSON.stringify(this.data.recruitData.express) + // 查看物流 + wx.navigateTo({ + url: `/pages/order/logistic/logistic?newData=` + encodeURIComponent(data) + }) + } else if(this.data.recruitData.can.status == 6) { + // 日历打卡 + } else { + // 面部检测 wx.navigateTo({ url: '/pages/index/assess/assess?type=1' }) @@ -72,5 +126,106 @@ Page({ content: this.data.recruitData.can.remark, success: res => {} }) + }, + + /** + * 获取code + */ + followCode() { + wx.getUserProfile({ + desc : "获取你的昵称、头像、地区及性别", + success : e => { + if(e.errMsg == "getUserProfile:ok"){ + wx.$api.recruit.wechatMini({ + code :this.data.loginCode, + iv : e.iv, + encryptedData: e.encryptedData + }).then(res => { + // subscribe == 0未关注公众号 + if (res.data.subscribe == 0) { + this.setData({ + followState: true + }) + return + } + // 获取首页数据 subscribe == 1已 关注公众号 + this.mallData(); + + }).catch(err => {}) + } + }, + fail: err => { + return; + } + }) + }, + + /** + * 日历 + */ + signInfo() { + wx.$api.recruit.signCalendar({ + date : this.data.selectMonth, + experience_id: this.data.recruitData.experience_id + }).then(res => { + this.setData({ + calendarData : res.data.calendar, + lastMonth : res.data.lastMonth, + nextMonth : res.data.nextMonth, + selectMonth : res.data.nowMonth, + canSign : res.data.canSign, + signDayNumber: res.data.signDayNumber, + signDayCount : res.data.signDayCount, + signWaterNumber : res.data.signWaterNumber + }) + }).catch(err => {}) + }, + + /** + * 日历数量加减 + */ + couponNumber(e){ + let val = e.currentTarget.dataset.type + if (val == 'plus'){ + this.setData({ + selectMonth: this.data.lastMonth + }) + }else{ + this.setData({ + selectMonth: this.data.nextMonth + }) + } + + // 获取日历 + this.signInfo(); + }, + + /** + * 签到弹出 + */ + tapPop() { + if(!this.data.canSign) { + wx.navigateTo({ + url: './signWrite/signWrite?experienceId=' + this.data.recruitData.experience_id + '&signDayNumber=' + this.data.signDayNumber + }) + } + }, + + /** + * 两次报告对比 + */ + skinInfo() { + wx.$api.recruit.skinDiff().then(res => { + console.log(res) + }).catch(err => {}) + }, + + /** + * 公众号弹出 + */ + followHide() { + this.setData({ + followState: !this.data.followState + }) } }) \ No newline at end of file diff --git a/pages/recruit/index.wxml b/pages/recruit/index.wxml index eab8bc2..5f68954 100644 --- a/pages/recruit/index.wxml +++ b/pages/recruit/index.wxml @@ -1,34 +1,179 @@ - - - - + + + + + + + + + + + + + + + 招募人数 + {{recruitData.total}}人 + + + + + 招募时间 + {{recruitData.start_at}} + + 即日起开始报名{{recruitData.total}}人,人满为止 + + + + 招募时间 + + 剩余名额 + + + + {{item}} + + + + + + + + + + + + + + + + + + + + + + + {{recruitData.can.text}} + {{recruitData.can.text}} + + + + 暂无邀请人,无法申请体验 + + + 查看驳回原因 + + + + + + + 水感应·好“雾”星球 + + + + + + + + + + + + + + - - - - - - 招募人数 - {{recruitData.total}}人 + + + Hi!张张 + 今天是你打卡的第{{signDayNumber}} + + + + + + {{selectMonth}} + + + + + + 日 + + + 一 + + + 二 + + + 三 + + + 四 + + + 五 + + + 六 + + + + + {{item.day}} + + {{item.day}} + + + - - - 招募时间 - {{recruitData.start_at}} + + + + 每日打卡获得{{signWaterNumber}}水滴,累积打卡 + {{signDayCount}}天,可再次兑换1瓶水感应喷雾 - 即日起开始报名{{recruitData.total}}人,人满为止 + {{canSign ? '打卡': '已打卡'}} - - - 招募时间 + + + + + + + + + + + VS + + + + + 衰老度分析 + + 抬头纹:10处 + 抬头纹:10处 + + + 鱼尾纹:8处 + 鱼尾纹:2处 + - 剩余名额 - - - - {{item}} + + 衰老度分析 + + 抬头纹:10处 + 抬头纹:10处 + + + 鱼尾纹:8处 + 鱼尾纹:2处 @@ -36,31 +181,21 @@ - - - - - - - + + + + + 日常分享 + + + 体验心得 + - - - - - {{recruitData.can.text}} - {{recruitData.can.text}} - - - - 暂无邀请人,无法申请体验 - - - 查看驳回原因 - + + @@ -68,4 +203,16 @@ 水感应·好“雾”星球 - \ No newline at end of file + + + + + + + + 关注公众号 + + + 截图扫码,关注公众号 + + diff --git a/pages/recruit/index.wxss b/pages/recruit/index.wxss index 82d3b16..c8e758c 100644 --- a/pages/recruit/index.wxss +++ b/pages/recruit/index.wxss @@ -2,10 +2,12 @@ width: 100%; } -.recruit { +.recruit, +.clockIn { margin: 10rpx 0; position: relative; width: 100%; + z-index: 9; } .recruit-back { @@ -202,4 +204,410 @@ /* .reject-tips image { width: 38rpx; display: inline-block; -} */ \ No newline at end of file +} */ + + +/* 打卡 */ +.clockImg { + width: 100%; +} + +.clockIn-tool { + display: flex; + margin: 80rpx -20rpx 40rpx; + height: 100rpx; + line-height: 100rpx; +} + +.clockIn-btn { + flex: 2; + text-align: center; + position: relative; + margin: 0 20rpx; +} + +.clockIn-btn-img, +.clockIn-btn-text { + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.clockIn-btn-text { + color: #ffffff; + font-size: 34rpx; + text-shadow: 4rpx 4rpx 4rpx rgba(0, 0, 0, .3); +} + + +/* 公众号关注 */ +.followPop { + position: fixed; + width: 100%; + height: 100%; + left: 0; + top: 0; + z-index: 99; + background-color: rgba(0, 0, 0, .4); + display: none; +} + +.followPop.active{ + display: block; +} + +.followCont { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; + z-index: 100; + display: none; +} + +.followCont.active{ + display: block; +} + +.followText { + position: absolute; + left: 50%; + top: 50%; + width: 500rpx; + margin-left: -250rpx; + margin-top: -260rpx; + border-radius: 20rpx; + overflow: hidden; + background-color: #ffffff; + text-align: center; +} + +.followText.active { + width: 300px; + height: 250rpx; + margin-top: -130rpx; + margin-left: -150px; +} + + +.weChat-close { + position: absolute; + right: 30rpx; + top: 25rpx; + width: 38rpx; + height: 38rpx; +} + +.weChat-img { + width: 60%; + margin: 30rpx auto 0; +} + +.weChat-title { + height: 90rpx; + line-height: 90rpx; + border-bottom: 2rpx dashed rgb(236, 236, 236); + font-weight: 600; +} + +.weChat-text { + font-size: 28rpx; + color: #9d9d9d; + line-height: 60rpx; + padding-bottom: 30rpx; +} + +.clockInTitle { + color: #ffffff; + margin-bottom: 30rpx; +} + +.clockInTitle-user { + font-size: 36rpx; + margin-bottom: 15rpx; +} + +.clockInTitle-text { + font-size: 26rpx; + display: flex; +} + +.clockInTitle-day { + position: relative; + padding: 0 15rpx; + margin: 0 15rpx; +} + +.clockInTitle-day text { + font-size: 44rpx; + position: absolute; + left: 0; + top: -20rpx; + font-style: italic; + font-weight: 600; + z-index: 2; +} + +.clockInTitle-day::after { + position: absolute; + content: ''; + left: 0; + bottom: 0; + width: 100%; + height: 16rpx; + background-color: #87b2f7; +} + +.clockInDate { + background-color: #ffffff; + border-radius: 30rpx; + position: relative; +} + +.clockInDate-img { + position: absolute; + top: -128rpx; + right: 0; + width: 140rpx; +} + +.date { + padding: 30rpx; + box-sizing: border-box; + display: flex; + width: 100%; +} + +.arrow-left { + width: calc(50% - 100rpx); + text-align: center; +} + +.arrow-left image { + width: 26rpx; + height: 26rpx; +} + +.arrow-left image { + transform: rotate(180deg); +} + +.arrow-right image { + transform: rotate(-360deg); +} + +.arrow-moon { + width: 200rpx; + text-align: center; +} + +.list { + padding: 30rpx; + box-sizing: border-box; + border-top: 2rpx solid #d6d6d6; + border-bottom: 2rpx solid #d6d6d6; +} + +.week { + display: flex; +} + +.week-label { + text-align: center; + font-size: 26rpx; + width: 14.28%; + padding-bottom: 30rpx; +} + +.total { + padding: 30rpx; + box-sizing: border-box; + font-size: 24rpx; + display: flex; +} + +.clockIn-border { + padding: 30rpx; +} + +.total-left { + flex: 1; +} + +.total-left-text text { + color: #ff9000; +} + +.total-btn { + background-color: #5390f4; + color: #ffffff; + border-radius: 80rpx; + line-height: 64rpx; + padding: 0 40rpx; + font-size: 26rpx; +} + +.total-btn.active { + background-color: #b3b3b3; +} + +/* 报告对比 */ +.backImg { + width: 100%; + position: absolute; + top: 50%; + left: 0; + z-index: 0; +} + +.ratio-title { + margin: 80rpx 0 30rpx; + width: 100%; + text-align: center; +} + +.ratio-title image { + width: 50%; +} + +.recruit-photo { + display: flex; + padding: 20rpx 60rpx 50rpx; + box-sizing: border-box; +} + +.recruit-photo-img { + background-color: #ffffff; + border-radius: 20rpx; + padding: 10rpx; + box-sizing: border-box; + width: 140rpx; + height: 140rpx; +} + +.recruit-photo-img image { + width: 100%; + height: 100%; +} + +.recruit-photo-text { + width: calc(100% - 280rpx); + text-align: center; + color: #ffffff; + font-weight: 600; + font-size: 56rpx; + line-height: 140rpx; +} + +.recruit-data { + background-color: #ffffff; + border-radius: 30rpx; + overflow: hidden; + padding: 0 40rpx 30rpx; + position: relative; +} + +.recruit-data::after { + position: absolute; + content: ''; + left: 0; + top: 0; + height: 50rpx; + background-image: linear-gradient(to top, transparent, #ebf3ff); + width: 100%; +} + +.recruit-list { + margin-top: 30rpx; +} + +.recruit-list-name { + color: #508df4; + text-align: center; + font-size: 34rpx; + margin-bottom: 20rpx; +} + +.recruit-list-item { + box-sizing: border-box; + flex-wrap: wrap; + justify-content: flex-start; + width: 100%; +} + +.recruit-list-label { + width: 50%; + display: inline-block; + line-height: 80rpx; + font-size: 26rpx; + color: #999999; + position: relative; + padding-left: 20rpx; + box-sizing: border-box; +} + +.recruit-list-label::after { + position: absolute; + content: ''; + left: 0; + top: calc(50% - 4rpx); + width: 8rpx; + height: 8rpx; + background-color: #999999; + border-radius: 50%; +} + +.recruit-list-label:last-child { + color: #000000; +} + +.recruit-list-label image { + width: 28rpx; + vertical-align: -4rpx; + margin-left: 10rpx; +} + +.day { + flex-wrap: wrap; + display: flex; +} + +.day-label { + width: 14.28%; + text-align: center; + line-height: 80rpx; + font-size: 28rpx; +} + +.label-block { + background-color: #ffffff; + text-align: center; +} + +.label-block.active { + color: #c4c4c4; +} + +.label-block.current { + color: #5893f4; + position: relative; +} + +.label-block.current::after { + border: 2rpx solid #5893f4; + position: absolute; + content: ''; + left: calc(50% - 24rpx); + top: calc(50% - 26rpx); + width: 52rpx; + height: 52rpx; + border-radius: 50%; + box-sizing: border-box; +} + +.label-success { + width: 52rpx; + vertical-align: -16rpx; +} \ No newline at end of file diff --git a/pages/recruit/referto/referto.js b/pages/recruit/referto/referto.js index eabcb71..5b2d46e 100644 --- a/pages/recruit/referto/referto.js +++ b/pages/recruit/referto/referto.js @@ -48,7 +48,9 @@ Page({ * 申请前置接口 */ recruitInfo(id) { - wx.$api.recruit.Enroll(id).then(res => { + wx.$api.recruit.Enroll(id, { + experience_area_id: getApp().globalData.experienceAreaId + }).then(res => { let areas = [ { city: "请选择城市", @@ -146,7 +148,8 @@ Page({ // district_id : this.data.regiId, experience_id : this.data.experienceId, experience_area_id : this.data.cityArr[this.data.cityIndex].experience_area_id, - experience_type_id : this.data.typesArr[this.data.typesIndex].experience_type_id + experience_type_id : this.data.typesArr[this.data.typesIndex].experience_type_id, + invite : getApp().globalData.inviteText } this.setData({ disabled: true diff --git a/pages/recruit/signWrite/signWrite.js b/pages/recruit/signWrite/signWrite.js new file mode 100644 index 0000000..b99b934 --- /dev/null +++ b/pages/recruit/signWrite/signWrite.js @@ -0,0 +1,143 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + albumArr : [], //商品轮播图 + experienceId : '', //活动id + signDayNumber: '', //累计打卡天数-携带 + etciData : '', //打卡心得 + bidData : '', //产品建议 + refertoStatus: false,//打卡成功弹出 + signDayNumber: '', //累计打卡天数-最新 + signWaterNumber: ' '//累计打卡水滴 + }, + + /** + * 生命周期函数--监听页面加载 + */ + // 个人使用喷雾主要还是以清洁、舒爽为目的,洗脸之后喷上一层喷雾,稍微呆上30s,心理上的幸福感高于它的功能,如果想要利用喷雾来明显改善皮肤状态,要持续使用 + // 保湿喷雾最基本的就是一定要安全、健康,通常保湿喷雾会在国家药监局有备案。若是不确定是否成分安全健康,大家可以登录国家药监局官网查询备案。 + + onLoad(options) { + this.setData({ + experienceId : options.experienceId, + signDayNumber: Number(options.signDayNumber) + 1 + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 上传商品封面图片 + */ + addAlbum(){ + let count = 9 - this.data.albumArr.length + wx.chooseImage({ + count : count, + success : res=>{ + // 上传图片 + if (res.tempFilePaths){ + let pathArr = res.tempFilePaths + wx.showLoading({ + title: '上传中', + }) + for (let i = 0; i < pathArr.length; i++){ + wx.$api.file.uploadImg(pathArr[i], {}).then(res=>{ + let albumArr = this.data.albumArr + albumArr.push({ + path: res.path, + showpath: res.url + }) + this.setData({ + albumArr + }) + }) + + if (i == pathArr.length - 1) { + wx.hideLoading() + } + } + }else{ + wx.showToast({ + title: '上传图片失败', + icon : 'none' + }) + } + } + }) + }, + + /** + * 删除商品封面图片 + */ + removeAlbum(e){ + wx.showLoading({ + title: '加载中' + }) + let index = e.currentTarget.dataset.index, + atalbum = this.data.albumArr + + wx.showToast({ + title: '删除成功', + icon : 'none' + }) + atalbum.splice(index,1) + this.setData({ + albumArr : atalbum + }) + }, + + /** + * 心得 + */ + etcinput(e) { + this.setData({ + etciData: e.detail.value + }) + }, + + /** + * 产品建议 + */ + bidinput(e) { + this.setData({ + bidData: e.detail.value + }) + }, + + /** + * 签到提交 + */ + tapSign() { + let newPictures = [] + for (let pictures of this.data.albumArr){ + newPictures.push(pictures.path) + } + + wx.$api.recruit.signLabor({ + experience_id : this.data.experienceId, + describe : this.data.etciData, + images : newPictures, + suggest : this.data.bidData + }).then(res => { + console.log(res) + this.setData({ + refertoStatus: true, + signDayNumber: res.data.signDayNumber, + signWaterNumber: res.data.signWaterNumber + }) + }).catch(err => {}) + }, +}) \ No newline at end of file diff --git a/pages/recruit/signWrite/signWrite.json b/pages/recruit/signWrite/signWrite.json new file mode 100644 index 0000000..74a4c3b --- /dev/null +++ b/pages/recruit/signWrite/signWrite.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "体验官签到" +} \ No newline at end of file diff --git a/pages/recruit/signWrite/signWrite.wxml b/pages/recruit/signWrite/signWrite.wxml new file mode 100644 index 0000000..4c28b9b --- /dev/null +++ b/pages/recruit/signWrite/signWrite.wxml @@ -0,0 +1,67 @@ + + + + + + + + + #使用心得##第{{signDayNumber}}天# + + + + + + 删除 + + + + + + 上传图片 + + + + + + #产品建议# + + + + + + + + + + 返回 + + + + 发布 + + + + + + + + + 水感应·好“雾”星球 + + + + + + + + + 已累计打卡{{signDayNumber}} + + +{{signWaterNumber}}水滴 + + + 我知道了 + + + diff --git a/pages/recruit/signWrite/signWrite.wxss b/pages/recruit/signWrite/signWrite.wxss new file mode 100644 index 0000000..9faab56 --- /dev/null +++ b/pages/recruit/signWrite/signWrite.wxss @@ -0,0 +1,236 @@ +.recruit-title { + width: 100%; +} + +.recruit-padding { + padding: 30rpx; + box-sizing: border-box; +} + +.recruit-block { + background-color: #5390f4; + border-radius: 50rpx; + padding: 20rpx; + box-sizing: border-box; +} + +.recruit-border { + border: 4rpx solid #000000; + border-radius: 50rpx; + padding: 50rpx; + box-sizing: border-box; +} + +.recruit-img { + width: 100%; +} + +.recruit-white { + background-color: white; + border-radius: 40rpx; + padding: 5rpx 35rpx; + box-sizing: border-box; + margin-top: 30rpx; + position: relative; +} + +.clockIn-tool { + display: flex; + margin: 80rpx -20rpx 40rpx; + height: 100rpx; + line-height: 100rpx; +} + +.clockIn-btn { + flex: 2; + text-align: center; + position: relative; + margin: 0 20rpx; +} + +.clockIn-btn-img, +.clockIn-btn-text { + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.clockIn-btn-text { + color: #ffffff; + font-size: 34rpx; + text-shadow: 4rpx 4rpx 4rpx rgba(0, 0, 0, .3); +} + + +.recruit-bottom { + position: relative; + height: 180rpx; +} + +.recruit-bottom-img { + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.recruit-bottom-text { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + z-index: 9; + color: #ffffff; + text-align: center; + font-size: 28rpx; +} + +.frame { + border-top: 4rpx dotted #ffffff; + border-bottom: 4rpx dotted #ffffff; + padding: 30rpx 0; + box-sizing: border-box; +} + +/* 图片上传 */ + +.album-list{ + display: flex; + flex-wrap:wrap; + margin: 30rpx -10rpx 0; +} + +.album-list-li{ + position: relative; + width: 30%; + padding-top: 30%; + box-sizing: border-box; + margin: 10rpx; +} + +.album-list-img, +.album-list-li-add{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #a1c5ff; + border-radius: 6rpx; +} + +.album-list-li-add{ + text-align: center; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-pack: center; + color: #ffffff; + font-size: 26rpx; +} + +.album-list-add-icon{ + width: 78rpx; + height: 78rpx; +} + +.album-remove{ + position: absolute; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, .5); + color: white; + font-size: 28rpx; + text-align: center; + line-height: 50rpx; + width: 100%; + z-index: 9; +} + +.frame-write-name { + color: #ffcb5c; + margin-bottom: 20rpx; +} + +.frame-write-text { + color: #cde0ff; + line-height: 44rpx; + max-height: 120rpx; + font-size: 26rpx; +} + +/* 弹出 */ +/* 弹出 */ +.refertoEject { + position: fixed; + width: 100vw; + height: 100vh; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, .6); + z-index: 10000; + display: none; +} + +.refertoEject.active { + display: block; +} + +.refertoCont { + -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; + text-align: center; + display: none; +} + +.refertoCont.active { + display: -webkit-box; +} + +.refertoCont-text { + background-color: #ffffff; + border-radius: 0 0 20rpx 20rpx; + padding: 40rpx; + box-sizing: border-box; + position: relative; +} + +.refertoCont-img { + width: 100%; + display: block; +} + +.refertoCont-tips { + margin: 30rpx 0; + color: #4284fd; + line-height: 50rpx; +} + +.refertoCont-icon { + width: 50rpx; + vertical-align: -10rpx; + margin-right: 10rpx; +} + +.refertoCont-tips text { + font-size: 44rpx; + padding-right: 10rpx; +} + +.refertoCont-btn { + background-color: #4284fd; + color: #ffffff; + line-height: 90rpx; + border-radius: 80rpx; + display: inline-block; + padding: 0 60rpx; + margin-top: 20rpx; +} \ No newline at end of file diff --git a/pages/recruit/writeList/writeList.js b/pages/recruit/writeList/writeList.js new file mode 100644 index 0000000..cfb4099 --- /dev/null +++ b/pages/recruit/writeList/writeList.js @@ -0,0 +1,70 @@ + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ + */ + +Page({ + + /** + * 页面的初始数据 + */ + data: { + listsArr : [], // 订单列表 + page : {}, // 分页信息 + lodingStats : false,// 加载状态 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + onShow() { + // 获取订单列表 + this.listInfo() + }, + + /** + * 订单列表 + */ + listInfo(page) { + wx.$api.recruit.signList({page : page || 1}).then(res => { + console.log(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.listInfo(); + }, + + /** + * 上拉加载 + */ + onReachBottom(){ + this.setData({ + lodingStats: true + }) + let pageNumber = this.data.page.current + if(this.data.page.has_more){ + pageNumber++ + // 获取订单列表 + this.listInfo(pageNumber); + } + } +}) \ No newline at end of file diff --git a/pages/recruit/writeList/writeList.json b/pages/recruit/writeList/writeList.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/pages/recruit/writeList/writeList.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/recruit/writeList/writeList.wxml b/pages/recruit/writeList/writeList.wxml new file mode 100644 index 0000000..639a03c --- /dev/null +++ b/pages/recruit/writeList/writeList.wxml @@ -0,0 +1,59 @@ + + + + + + + + + + #使用心得##第{{item.day_number}}天# + {{item.describe}} + + + + + + + + + #产品建议# + {{item.suggest}} + + + + + + + 加载中... + + + 没有更多了~ + + + + + + + + 返回 + + + + 报告 + + + + + + + + + 水感应·好“雾”星球 + + + + + + 暂无数据 + \ No newline at end of file diff --git a/pages/recruit/writeList/writeList.wxss b/pages/recruit/writeList/writeList.wxss new file mode 100644 index 0000000..c08f9aa --- /dev/null +++ b/pages/recruit/writeList/writeList.wxss @@ -0,0 +1,159 @@ +.recruit-title { + width: 100%; +} + +.recruit-padding { + padding: 30rpx; + box-sizing: border-box; +} + +.recruit-block { + background-color: #5390f4; + border-radius: 50rpx; + padding: 20rpx; + box-sizing: border-box; + margin-bottom: 30rpx; +} + +.recruit-border { + border: 4rpx solid #000000; + border-radius: 50rpx; + padding: 50rpx; + box-sizing: border-box; +} + +.recruit-img { + width: 100%; +} + +.recruit-white { + background-color: white; + border-radius: 40rpx; + padding: 5rpx 35rpx; + box-sizing: border-box; + margin-top: 30rpx; + position: relative; +} + +.clockIn-tool { + display: flex; + margin: 80rpx -20rpx 40rpx; + height: 100rpx; + line-height: 100rpx; +} + +.clockIn-btn { + flex: 2; + text-align: center; + position: relative; + margin: 0 20rpx; +} + +.clockIn-btn-img, +.clockIn-btn-text { + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.clockIn-btn-text { + color: #ffffff; + font-size: 34rpx; + text-shadow: 4rpx 4rpx 4rpx rgba(0, 0, 0, .3); +} + + +.recruit-bottom { + position: relative; + height: 180rpx; +} + +.recruit-bottom-img { + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.recruit-bottom-text { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + z-index: 9; + color: #ffffff; + text-align: center; + font-size: 28rpx; +} + +.frame { + border-top: 4rpx dotted #ffffff; + border-bottom: 4rpx dotted #ffffff; + padding: 30rpx 0; + box-sizing: border-box; +} + +/* 图片上传 */ + +.album-list{ + display: flex; + flex-wrap:wrap; + margin: 20rpx -10rpx 0; +} + +.album-list-li{ + position: relative; + width: 30%; + padding-top: 30%; + box-sizing: border-box; + margin: 10rpx; +} + +.album-list-img, +.album-list-li-add{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #a1c5ff; + border-radius: 6rpx; +} + +.album-list-li-add{ + text-align: center; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-pack: center; + color: #ffffff; + font-size: 26rpx; +} + +.album-list-add-icon{ + width: 78rpx; + height: 78rpx; +} + +.album-remove{ + position: absolute; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, .5); + color: white; + font-size: 28rpx; + text-align: center; + line-height: 50rpx; + width: 100%; + z-index: 9; +} + +.frame-write-name { + color: #ffcb5c; + margin-bottom: 20rpx; +} + +.frame-write-text { + color: #cde0ff; + line-height: 48rpx; +} diff --git a/pages/report/index.js b/pages/report/index.js index 5c4a1cf..4702bca 100644 --- a/pages/report/index.js +++ b/pages/report/index.js @@ -10,33 +10,19 @@ Page({ page : {}, // 分页信息 lodingStats : false, // 加载状态 disabled : false, // 支付按钮 - payCode : '', // code获取openid - openId : '', // openid payStatus : false, // 支付弹框 catchtouchmove: false }, - onLoad(options) { - }, + 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 { @@ -66,24 +52,13 @@ Page({ }).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 + url: '/pages/index/assess/assess?code=' + wx.getStorageSync("openid") }) }else{ // 去登录 diff --git a/project.private.config.json b/project.private.config.json index 56f1921..3910f25 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -10,14 +10,14 @@ "list": [ { "name": "", - "pathName": "pages/report/detail/detail", + "pathName": "pages/recruit/index", "query": "", "launchMode": "default", "scene": null }, { "name": "", - "pathName": "pages/report/index", + "pathName": "pages/recruit/signWrite/signWrite", "query": "", "launchMode": "default", "scene": null diff --git a/static/icons/circle_add.png b/static/icons/circle_add.png new file mode 100644 index 0000000000000000000000000000000000000000..f81b481bec2c813aafa90b692cc9139838101a83 GIT binary patch literal 2634 zcmbVO3pkT)AD?3qnM34NtVvO08#BzQ*+$BcBt>Pm$1HZR4O>|`gh{<6bfR-_r2|%y z4$^9GB8f=6<+K!{n0hlxea|X=-*;VI@AX~Zb6x-EzVGM$|9=0&{r}(BlM@{1r?2~) zE(8M6_g_v70mpci=xBrQJuzz^frB}p6wY7Gj^QU$xBvuCV@Crpej?I5_}EWiuTpDjf#_lLMk55D#wwheC}5_^@bz&R}`MM{d@@VGNole62GX zMdlEISjO@#TwwKEA7)D@o0hqG`)}D&SxWZiA9MD({$_a~rIik>RNR%rQ?PQNa<4{~gTrUASuhnNC7PYc_k@FuE5UyMH#MQUtxh1#ubRp-|$9Y-%DCVDbHl zo^Wu-fySWWFs>+P8VXCZr#b;>`)Cw~YVV3dq3oU9P%bnyHU{PBgqh~~6&~$^adE|< zh>j>%EE-KB`MBaq1V@aIv#T@FiRAke>(AoxDJ&{5ZJPnw{(&X@BNj*C0u(-*8_H(K zPgg;3ESt~f#j-gtM=+r<+qDc9jh)Q1Q=QTGkcj}7kp$3uxojrvTas~%UpVl;1^*pS z`+t*%1f4>vD&;>aXZjOZj;iU;J^&X#I|*Qc?ZXB8r1dsrBLt$&^e5s&1%C~15XFYA znd`lpSGd2R!7Hr7w*G3!AFo$8wjC4s0$&3enM4$ug8mAnABe)S!ClYUb2ky-*^^oJ|Y*Y$#tSudy}aNt&DPKh~5xox8_f739&~^G?gGC4bdI zTvdTGLrc_#l_v`B7Hqk<51(~NHY0aK`72pmfv3P>=%o8YxFShz3RrzKrW+b`z{716 zzHo)#HX)}3>hzbnZD$7WBonjb{#Lh=MNa zDrv06T}CY;zOFFpqj)bGFF3^YjXRHMI_>91t%g#ye_^_j+qVnk30byzdR$Efg zw`!@dvcpI-LNlVI_-~U-Gy6K12+JxKK&gn)ytO@8E#=0-*4%z**si^Nu99N&Q9I$-hl;{PYsO8Pa`hz50L}@^LTk`CZj2GdA6hzF{ zTL$qZwa%sEOPVi^*Uq;bykG=f>3{Ts&t!T`b!tRxw*cc6wlFq1vleCkY0S|V_o3&l zhsW2~8;=VeB<`8sWMExe7qm*u(6E5a~Z z3Y>zAOijgPmo}gB$kE0rQ}U!-FQvKT#UI5sZP0+GGg)kZ&+7#+W<$#^h@zs24nH{>lvC8D5b-xIV+ve6qz@wQF}}N^*}k&#pt@9BdUp5z%}pU9Z}d zfB)g_qL2?K{Nry(+6!QZFllubwn~}$xTc&~vUY`W<<~v@g9bOB2u1#fUy9oTqQ+j| zetMWcyXUjX@Z)FVKT(?viWqUYs_<4aY|K|Wsrj~T=@eQr{IC<+VD-py@S*YKHDvy+ zdrEa_R;o+4vmo+iVor)~eAVjIy3-{knKIBz?Dslyj6a zId?v(oGRY*M(MsYsuLVt=aR~kz^h<52OjPuKY-h)xH-3Pjitv{}&}MV$}cu literal 0 HcmV?d00001 diff --git a/static/icons/drop.png b/static/icons/drop.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4dd0f032c666842730b7fe2ce474c17ca28120 GIT binary patch literal 1873 zcma)7ZEO@p7+$m>6bYa-B1OAyHMFIB`*F9scPj_(?cKFUIc(ZXXi*cUyK{G&-t8>A zTkcvDpcur)1c^U18YDu51e;WTRMOBG3qOn+LyQp&Mx{o6G*P3*uRj``y{}d+$|ZX< zJM%oxJMYK5JJ!9kV^#fzdV(NUB|4)$c--JU%a`H*v)gxE#={D$v)>_zmG^qj65`e4 z>j`4%cSfqu?Mv>EHI(-O9SuNVF>hfsL2TJpw174UU2*_s3^PpqF#Rq?8hV)8B_!FT zrNXSyIby@!k)0`RWKav~)V8hUmZFRW^3VljF`qLXxfrHOx-y=7%M3-9Anst8QapoX zU$UE2kqt?~C(;@h2$E9B$B6;fFSe6B%Y_&=$Z&p|`A#Wv46R!vNed|&GY2g zK5V(-!)=gb`=II8=s5KMO|II}wHnSEvU8;{=^6ubFpu>d>=RdW$jTxYIazcI>DqQF z5S{@XE%|ZVz(oUcQKSudl8I=T!aF|Q&}F~^iIviT4hnvb7W{z$8t@uR4@jCY05~2B zkgMt}##h-`T#ZH~F0Kk37mEdjxES{#TPG!z0F%j#MX@ct5CR&5AeWTz0yRV%f-8VQoe0U}#=8K#a3PU`{!i~<*i zDW2tV!Adm8r8q(MbGU3bvq70<%g`j!jr8!pp`sk{%YoqEp!m+{zy<#c)-^ee>^#8b zW8^^wGM1U4$Xa$}73GkP4dc^c59ikts@iR%w2{LbPESXKOvF@?3yC7l`#A50loJ|- zwy_WDaU12yQi;pPBH@k1q`0IgQJfmTml}m*BN2&JBb=hf*@#G0xcVYxQQ^jJ$z^JX z=`^^mJYkHbjlof#vDB`XtACDl3h{Z(%8(qrr2`{}^;oOGmd5tiaj{f}O!(Xra z=H}|?x~m7*TJY3;v%9-~9qwM9y;C}HVtS^T-8*`@{o3J2#;3{Y*HPDRLwC=$^ePQ0 zrD3vZ^1S}m#Ie=nsdFnP57tdh{&L6K!%Z`xHG^kQbSX3SYeMgg_FpT;PUgNnv-GQ1 z8e;n&qOZ_Dp6j@|YVPG{KdO7x!l9`Tc`6MAz(tb5j)2c;?a2*vBv2AM!qWiP+BQL}bsQ FzW|pWXa)cP literal 0 HcmV?d00001 diff --git a/static/icons/flat.png b/static/icons/flat.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1a09a17e4edf38e19a051e6ae4621e1880c1e5 GIT binary patch literal 1283 zcmaJ>TWs4@7}`y!vPF)PAb`)l}n9rl2)cf+lH!^b%e&SfuX7{N|VsS^Ke2@!^H2O)(BjY z!^A#+ib?5lSX4%447hh@JS)viN+FpT8pH>x93m(~OT???l4^3*FtN(Zp}DMCDRxJgylK_fr8<0=^*5hA0s5G2Xy#+{1tn%>-%SB^kgm0nX3jjfX(q47tE% z_(a1OT7`+CW$7GES1J{%;-xfWf(D@w;_%QO4~Z;Db6T~;Dyf<~n+!ZOB}36IMN@H` zQOs*oR+vCa*Fq@ksnj~LYBmyuQbt!rody&`m&yXYsQ=2j* zRFA^WCK%=J-i~ZTq=wsLD5xl6iPxm5GE}W3A12TVB`Y!~G9t^c1(6K;y@2$4eR)#! zNDP^0C4XK79_WXl$+HnY=#P41tQUYp+z)^t#C!oZ5%L7Raa0q3G}go>Rnrnx2{wHz z$ae$F+!M>i4JcZgk=3+PvkTHi&C<-GrsEz!0laUYqRLvu?6+&Q7BUYF1_`42rKsYU=N1vYk z?*3Ok4o420y5h;tQSIMvIUFjq>;k>VUbyf#IB@9C?Y-_ZN80K^GVflxEj%#Ne&0t} z=Se5%d!)M9ebqVYYdu(U4<7qK|7QR4N+GA;-2U>N&BsU2UTXcN=DN<}U@^LRVPR}> z&m!q?bgtZ;uQ6}Tc3(Rgzw^vnud;m?N4kcuB>4TV6I(O&%gZ0W`LpATRuA^a=`F6o z+dbQcpNQ;s*GrKSmU4fMC(jY-8?Ids>Gk>RuF?0Mv%}wxxvze;sa`wV-}O@M8rjpa obY}KE{Hb`@_gvSLj>u65HotVF^5bKj1^c&@6vp}Uv1jN00cx+LUH||9 literal 0 HcmV?d00001 diff --git a/static/icons/uricacidClose.png b/static/icons/uricacidClose.png new file mode 100644 index 0000000000000000000000000000000000000000..aee1c19c3ce934d9bbbfac7620d7443fc53957e0 GIT binary patch literal 449 zcmV;y0Y3hTP){ zfLZxlK8J?}(GYLxo?a=r02W0=tbDAD=nx(8Z&kf}We5ReK}5xyE*O9f!4N+Tz=B|j zp8|+NFvU*;%tElmhX6()GQ@`gP>3w?6aWvRuH$>pX2A@B(!DDV_-d0c410 zLAU^!;u#PKz}d|ly{l|&b}2V=bny)*pggVvhv0U-?q2tKU2E@sbpp-<14Kk+j$Htm rvx~%D4j{9X`OR`5b9Rx~mv`U;3;-5De05=d00000NkvXXu0mjfD?GY~ literal 0 HcmV?d00001 diff --git a/static/imgs/weChat_code.jpg b/static/imgs/weChat_code.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f44d56c20c1ae9a2d44d9a5b278a975bbacb898 GIT binary patch literal 7963 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 Ph!4L>{C{}XRy_GH(J;R} literal 0 HcmV?d00001