Lee
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
**/node_modules
|
||||||
|
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# misc
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-error.log
|
||||||
|
yarn.lock
|
||||||
|
package-lock.json
|
||||||
|
*bak
|
||||||
|
|
||||||
|
# visual studio code
|
||||||
|
.vscode
|
||||||
|
.history
|
||||||
|
*.log
|
||||||
|
functions/*
|
||||||
|
.temp/**
|
||||||
|
|
||||||
|
.eslintcache
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
// 使用 IntelliSense 了解相关属性。
|
||||||
|
// 悬停以查看现有属性的描述。
|
||||||
|
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": []
|
||||||
|
}
|
|
@ -0,0 +1,135 @@
|
||||||
|
*{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.body{
|
||||||
|
width: 100vw;
|
||||||
|
min-height: 100vh;
|
||||||
|
padding-bottom: 180rpx;
|
||||||
|
background-color: #edeff2;
|
||||||
|
font-family: 'Open Sans', sans-serif;
|
||||||
|
color: #6a859c;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
input::-webkit-input-placeholder,
|
||||||
|
textarea::-webkit-input-placeholder{
|
||||||
|
color: #999999;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.header{
|
||||||
|
line-height: 128rpx;
|
||||||
|
font-size: 36rpx;
|
||||||
|
text-align: center;
|
||||||
|
border-bottom: 4rpx solid #69b9ff;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
width: 94%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.head{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 2%;
|
||||||
|
line-height: 116rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
text-align: center;
|
||||||
|
border-bottom: 4rpx solid #69b9ff;
|
||||||
|
}
|
||||||
|
.head>navigator{
|
||||||
|
width: 10%;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.head>text{
|
||||||
|
font-size: 32rpx;
|
||||||
|
width: 90%;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.head .head-txt{
|
||||||
|
display: block;
|
||||||
|
line-height: 44rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pull-btns{
|
||||||
|
display: inline-block;
|
||||||
|
height: 76rpx;
|
||||||
|
line-height: 76rpx;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
margin-left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
checkbox{
|
||||||
|
width: 0 !important;
|
||||||
|
height: 0 !important;
|
||||||
|
border: 0;
|
||||||
|
background: none;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.checkbox-text{
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
.a-checkbox:checked{
|
||||||
|
background-color: #2e80b6;
|
||||||
|
}
|
||||||
|
checkbox+.point{
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 13px;
|
||||||
|
height: 13px;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
}
|
||||||
|
checkbox+.point2{
|
||||||
|
background-color:#2e80b6;
|
||||||
|
background-image: url(/static/success.png);
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 7px 7px;
|
||||||
|
}
|
||||||
|
radio{
|
||||||
|
width: 0 !important;
|
||||||
|
height: 0 !important;
|
||||||
|
border: 0;
|
||||||
|
background: none;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
label{
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.radio-text{
|
||||||
|
line-height: 40rpx;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
.a-radio-checked{
|
||||||
|
background-color: #2e80b6;
|
||||||
|
}
|
||||||
|
radio+.point{
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
border-radius: 100%;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
radio+.point2{
|
||||||
|
border: 1px solid #2e80b6;
|
||||||
|
}
|
||||||
|
radio+.point2>text{
|
||||||
|
display: block;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 100%;
|
||||||
|
background-color:#2e80b6;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
}
|
||||||
|
.on-click,
|
||||||
|
.on-click:hover{
|
||||||
|
background-color: #bcbcbc !important;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
// 公共js
|
||||||
|
import toolAll from './utils/tools'
|
||||||
|
dd['$toolAll'] = toolAll;
|
||||||
|
import http from './utils/requst'
|
||||||
|
dd['$http'] = http;
|
||||||
|
import utils from '/utils/utils'
|
||||||
|
dd['utils'] = utils;
|
||||||
|
// dd['baseUrl'] = 'http://aspiration.scdxtc.cn';
|
||||||
|
dd['baseUrl'] = 'https://ypzy.emingren.com';
|
||||||
|
App({
|
||||||
|
onLaunch(options) {
|
||||||
|
// 第一次打开
|
||||||
|
// options.query == {number:1}
|
||||||
|
console.info('App onLaunch');
|
||||||
|
},
|
||||||
|
onShow(options) {
|
||||||
|
// 从后台被 scheme 重新打开
|
||||||
|
// options.query == {number:1}
|
||||||
|
},
|
||||||
|
onHide(){
|
||||||
|
dd.removeStorageSync({key:'anliObj'})
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"pages": [
|
||||||
|
"pages/start/start",
|
||||||
|
"pages/login/login",
|
||||||
|
"pages/login/bind/bind",
|
||||||
|
"pages/login/code/code",
|
||||||
|
"pages/login/verification/verification",
|
||||||
|
"pages/home/home"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
<view>
|
||||||
|
<swiper
|
||||||
|
style="height:150px"
|
||||||
|
class="demo-swiper"
|
||||||
|
autoplay="{{autoplay}}"
|
||||||
|
vertical="{{vertical}}"
|
||||||
|
interval="{{interval}}"
|
||||||
|
circular="{{circular}}"
|
||||||
|
>
|
||||||
|
<block a:for="{{bannerList}}">
|
||||||
|
<swiper-item>
|
||||||
|
<view><image mode="scaleToFill" src="{{item.src}}" style="width:100%;" /></view>
|
||||||
|
</swiper-item>
|
||||||
|
</block>
|
||||||
|
</swiper>
|
||||||
|
</view>
|
|
@ -0,0 +1,66 @@
|
||||||
|
Component({
|
||||||
|
mixins: [],
|
||||||
|
data: {
|
||||||
|
indicatorDots: true,
|
||||||
|
autoplay: true,
|
||||||
|
vertical: false,
|
||||||
|
interval: 4000,
|
||||||
|
circular: true,
|
||||||
|
bannerList:[]
|
||||||
|
},
|
||||||
|
// 轮播事件start
|
||||||
|
changeIndicatorDots(e) {
|
||||||
|
this.setData({
|
||||||
|
indicatorDots: !this.data.indicatorDots,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
changeVertical() {
|
||||||
|
this.setData({
|
||||||
|
vertical: !this.data.vertical,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
changeCircular(e) {
|
||||||
|
this.setData({
|
||||||
|
circular: !this.data.circular,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
changeAutoplay(e) {
|
||||||
|
this.setData({
|
||||||
|
autoplay: !this.data.autoplay,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
intervalChange(e) {
|
||||||
|
this.setData({
|
||||||
|
interval: e.detail.value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 轮播事件end
|
||||||
|
|
||||||
|
props: {},
|
||||||
|
didMount() {
|
||||||
|
this.bannerEv();
|
||||||
|
},
|
||||||
|
didUpdate() {},
|
||||||
|
didUnmount() {},
|
||||||
|
methods: {
|
||||||
|
// 获取轮播图
|
||||||
|
bannerEv(){
|
||||||
|
dd.$http.get('/api/dictionary/get-slide-list',{position:'customer_home_banner'}).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
let arr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let bannerObj = {
|
||||||
|
id:item.id,
|
||||||
|
src:dd.baseUrl + item.src,
|
||||||
|
url:item.url
|
||||||
|
}
|
||||||
|
arr.push(bannerObj);
|
||||||
|
})
|
||||||
|
this.setData({
|
||||||
|
bannerList:arr
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"component": true
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
.nav-tabs {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
background: #f5f5f5;
|
||||||
|
}
|
||||||
|
.tab-list {
|
||||||
|
width: 34%;
|
||||||
|
padding: 30rpx 0;
|
||||||
|
}
|
||||||
|
.tab-list>view{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.nav-tabs .tab-list:nth-of-type(2)>view{
|
||||||
|
border-left: 2rpx solid #9f9f9f;
|
||||||
|
border-right: 2rpx solid #9f9f9f;
|
||||||
|
}
|
||||||
|
.tab-list>view>view:first-child,
|
||||||
|
.tab-list>view>view:first-child image{
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-text {
|
||||||
|
height: 60rpx;
|
||||||
|
box-sizing: content-box;
|
||||||
|
font-size: 30rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
|
color: #424652;
|
||||||
|
margin-left: 6rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.active {
|
||||||
|
background: #e2e2e2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tabbar切换选中的文字颜色 */
|
||||||
|
|
||||||
|
/* .active text {
|
||||||
|
color: #2697EB !important;
|
||||||
|
} */
|
||||||
|
|
||||||
|
.show {
|
||||||
|
display: block;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
flex: 1;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
<view class="nav-tabs">
|
||||||
|
<view class="tab-list {{currentTab == 0 || currentTab == 1 ? 'active' : 'default' }}" onTap="toConsultant">
|
||||||
|
<view>
|
||||||
|
<view>
|
||||||
|
<image mode="scaleToFill" src="/static/menu01.png" />
|
||||||
|
</view>
|
||||||
|
<view class="tab-text">专家列表</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="tab-list {{currentTab == 2 ? 'active' : 'default' }}" onTap="toSupervisor">
|
||||||
|
<view>
|
||||||
|
<view>
|
||||||
|
<image mode="scaleToFill" src="/static/menu02.png" />
|
||||||
|
</view>
|
||||||
|
<view class="tab-text">付费咨询</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="tab-list {{currentTab == 3 ? 'active' : 'default' }}" onTap="toExaminee">
|
||||||
|
<view>
|
||||||
|
<view>
|
||||||
|
<image mode="scaleToFill" src="/static/menu03.png" />
|
||||||
|
</view>
|
||||||
|
<view class="tab-text">个人中心</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
|
@ -0,0 +1,40 @@
|
||||||
|
Component({
|
||||||
|
mixins: [],
|
||||||
|
data: {
|
||||||
|
currentTab: 1
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
currentTab: String
|
||||||
|
},
|
||||||
|
didMount() {
|
||||||
|
this.setData({
|
||||||
|
currentTab: this.props.currentTab
|
||||||
|
})
|
||||||
|
},
|
||||||
|
didUpdate() {},
|
||||||
|
didUnmount() {},
|
||||||
|
methods: {
|
||||||
|
toConsultant(){
|
||||||
|
dd.reLaunch({
|
||||||
|
url: '/pages/consultant/list/list'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
toSupervisor(){
|
||||||
|
dd.reLaunch({
|
||||||
|
url: '/pages/supervisor/index/index'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
toExaminee(){
|
||||||
|
if(dd.$toolAll.getCache('roleType')){
|
||||||
|
// 前往咨询师资料页
|
||||||
|
dd.reLaunch({
|
||||||
|
url: '/pages/consultant/user/user'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
dd.reLaunch({
|
||||||
|
url: '/pages/examinee/user/user'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"component": true
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
export default {
|
||||||
|
// BASE_URL: 'http://aspiration.scdxtc.cn' // api接口服务器地址
|
||||||
|
BASE_URL: 'https://ypzy.emingren.com' // api接口服务器地址
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@antv/f2": "^3.8.10-beta.1",
|
||||||
|
"@antv/my-f2": "^2.1.7"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
<view>
|
||||||
|
<web-view src="{{url}}" onMessage="test"></web-view>
|
||||||
|
</view>
|
|
@ -0,0 +1,19 @@
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
url:''
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
let userData = JSON.stringify(dd.$toolAll.getCache('userData'));
|
||||||
|
let userType = dd.$toolAll.getCache('userData').userType;
|
||||||
|
console.log(userType,123)
|
||||||
|
if(userType==1){
|
||||||
|
this.setData({
|
||||||
|
url: 'http://aspevel.scdxtc.cn/#/consultant?userData='+userData
|
||||||
|
})
|
||||||
|
}else if(userType==0){
|
||||||
|
this.setData({
|
||||||
|
url: 'http://aspevel.scdxtc.cn/#/index?userData='+userData
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
input::-webkit-input-placeholder,
|
||||||
|
textarea::-webkit-input-placeholder{
|
||||||
|
color: #dedede;
|
||||||
|
}
|
||||||
|
.phone-txt{
|
||||||
|
padding: 1.2rem .4rem 0;
|
||||||
|
border-top: .02rem solid #FAFAFA;
|
||||||
|
}
|
||||||
|
.phone-title{
|
||||||
|
font-size: .4rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.phone-txt input{
|
||||||
|
width: 100%;
|
||||||
|
height: .9rem;
|
||||||
|
line-height: .9rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
border-bottom: .02rem solid #e2e4e6;
|
||||||
|
}
|
||||||
|
.flex{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.flex .span-02{
|
||||||
|
width: 100%;
|
||||||
|
font-size: .3rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
margin-top: .2rem;
|
||||||
|
}
|
||||||
|
.flex .span-01{
|
||||||
|
width: auto;
|
||||||
|
font-size: .3rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
margin-top: .2rem;
|
||||||
|
color: #348bff;
|
||||||
|
}
|
||||||
|
.login-btns{
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
.login-btns>view{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: .8rem;
|
||||||
|
background-color: #3440c9;
|
||||||
|
border-radius: .16rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.addr-select-bg{
|
||||||
|
width: 100vw;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
||||||
|
/* 授权按钮 */
|
||||||
|
.nail-popup-btns view{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: .8rem;
|
||||||
|
margin-top: .4rem;
|
||||||
|
background-color: #348bff;
|
||||||
|
border-radius: .16rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.nail-popup-btns view:last-child{
|
||||||
|
margin-top: .15rem;
|
||||||
|
background-color: rgba(0,0,0,0);
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
/* 提示框 */
|
||||||
|
.toast{
|
||||||
|
width: 3rem;
|
||||||
|
padding: .2rem .25rem;
|
||||||
|
background-color: rgba(255,255,255,.8);
|
||||||
|
color: #333333;
|
||||||
|
border-radius: .1rem;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
text-align: center;
|
||||||
|
position: fixed;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.my-confirm-bg{
|
||||||
|
width: 100vw;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
||||||
|
.my-confirm{
|
||||||
|
width: 5rem;
|
||||||
|
padding: .4rem .3rem;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-radius: .3rem;
|
||||||
|
box-shadow: 0 0 .13rem rgba(29,47,67,.1);
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.my-confirm>text{
|
||||||
|
display: block;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.confirm-btns{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
margin-top: .4rem;
|
||||||
|
}
|
||||||
|
.confirm-btns>view{
|
||||||
|
width: 1.6rem;
|
||||||
|
line-height: .5rem;
|
||||||
|
border-radius: .25rem;
|
||||||
|
border: .02rem solid #333fc9;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
font-size: .26rem;
|
||||||
|
color: #333fc9;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.confirm-btns>view:first-child{
|
||||||
|
background-color: #333fc9;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
<view>
|
||||||
|
<view class="verification pull-content list-section">
|
||||||
|
<view class="phone-txt">
|
||||||
|
<view class="phone-title">手机号</view>
|
||||||
|
<view class="flex">
|
||||||
|
<input type="input" onInput="bindKeyInput" placeholder="请输入需要绑定的手机号"/>
|
||||||
|
</view>
|
||||||
|
<view class="login-btns">
|
||||||
|
<view onTap="checkPhone">获取验证码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提示框 -->
|
||||||
|
<view class="addr-select-bg" a:if="{{isToast}}"></view>
|
||||||
|
<view class="toast" a:if="{{isToast}}">
|
||||||
|
<view>{{toastText}}</view>
|
||||||
|
</view>
|
||||||
|
<!-- 手机验证弹窗 -->
|
||||||
|
<view class="my-confirm-bg" a:if="{{openPhoneTips}}"></view>
|
||||||
|
<view class="my-confirm" a:if="{{openPhoneTips}}">
|
||||||
|
<text>{{tipsMsg}}</text>
|
||||||
|
<view class="confirm-btns">
|
||||||
|
<view onTap="modePhone">手机登录</view>
|
||||||
|
<view onTap="clearPhone">更换号码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
|
@ -0,0 +1,88 @@
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
isToast: false,
|
||||||
|
openPhoneTips: false, //验证手机号弹出框
|
||||||
|
tipsMsg: '',
|
||||||
|
toastText: '',
|
||||||
|
phoneNumber: ''
|
||||||
|
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
dd.setNavigationBar({
|
||||||
|
title: '绑定手机号',
|
||||||
|
backgroundColor: '#FFFFFF',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取电话号码
|
||||||
|
bindKeyInput(e) {
|
||||||
|
this.setData({
|
||||||
|
phoneNumber: e.detail.value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 手机号登录
|
||||||
|
// 验证手机号是否存在
|
||||||
|
checkPhone(){
|
||||||
|
console.log(this.data.phoneNumber,123)
|
||||||
|
let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
|
||||||
|
if (this.data.phoneNumber == "") {
|
||||||
|
this.setData({
|
||||||
|
toastText: '请填写您的手机号!',
|
||||||
|
isToast: true
|
||||||
|
})
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
isToast: false
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
return false;
|
||||||
|
} else if (!reg_tel.test(this.data.phoneNumber)) {
|
||||||
|
this.setData({
|
||||||
|
toastText: '请正确填写您的手机号!',
|
||||||
|
isToast: true
|
||||||
|
})
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
isToast: false
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let params = {
|
||||||
|
phone: this.data.phoneNumber
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/user/has-phone-user',params).then(res=>{
|
||||||
|
console.log(res,'登录认证数据')
|
||||||
|
if(res.data.registered == 0){
|
||||||
|
this.bindPhone();
|
||||||
|
}else if(res.data.registered == 1){
|
||||||
|
this.setData({
|
||||||
|
openPhoneTips: true,
|
||||||
|
tipsMsg: '该手机号已注册,请使用手机号登录或换绑其他手机号录'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 手机号绑定
|
||||||
|
bindPhone() {
|
||||||
|
let params = {
|
||||||
|
phone: this.data.phoneNumber,
|
||||||
|
type: "bind",
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/common/send-sms-captcha',params).then(res=>{
|
||||||
|
console.log(res,'验证码数据')
|
||||||
|
// 跳转页面
|
||||||
|
dd.navigateTo ({
|
||||||
|
url: '/pages/logins/code/code?phone='+this.data.phoneNumber+'&code='+res.data.code
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
clearPhone(){
|
||||||
|
this.setData({
|
||||||
|
openPhoneTips: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
input::-webkit-input-placeholder,
|
||||||
|
textarea::-webkit-input-placeholder{
|
||||||
|
color: #dedede;
|
||||||
|
}
|
||||||
|
/* 手机验证码 */
|
||||||
|
.verification-txt{
|
||||||
|
padding: 1.2rem .4rem 0;
|
||||||
|
border-top: .02rem solid #FAFAFA;
|
||||||
|
}
|
||||||
|
.verification-txt>.p{
|
||||||
|
font-size: .4rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.verification-txt>.span{
|
||||||
|
display: block;
|
||||||
|
font-size: .26rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #999999;
|
||||||
|
margin-top: .2rem;
|
||||||
|
}
|
||||||
|
/* 输入验证码 */
|
||||||
|
.security-code-wrap {
|
||||||
|
overflow: hidden;
|
||||||
|
padding: .2rem 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.security-code-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 5.32rem;
|
||||||
|
}
|
||||||
|
.field-wrap {
|
||||||
|
list-style: none;
|
||||||
|
display: block;
|
||||||
|
width: .72rem;
|
||||||
|
height: 1rem;
|
||||||
|
line-height: 1rem;
|
||||||
|
font-size: .64rem;
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: .02rem solid #e0e2e4;
|
||||||
|
}
|
||||||
|
.char-field {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
.input-code {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 5.32rem;
|
||||||
|
height: 1rem;
|
||||||
|
opacity: 0;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 重获验证码 */
|
||||||
|
.getCode{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: .8rem;
|
||||||
|
margin-top: .4rem;
|
||||||
|
background-color: #348bff;
|
||||||
|
border-radius: .16rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 提示框 */
|
||||||
|
.toast{
|
||||||
|
width: 3rem;
|
||||||
|
padding: .2rem .25rem;
|
||||||
|
background-color: rgba(255,255,255,.8);
|
||||||
|
color: #333333;
|
||||||
|
border-radius: .1rem;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
text-align: center;
|
||||||
|
position: fixed;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.addr-select-bg{
|
||||||
|
width: 100vw;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
<view>
|
||||||
|
<view class="verification pull-content list-section">
|
||||||
|
<view class="verification-txt">
|
||||||
|
<view class="p">输入验证码</view>
|
||||||
|
<view class="span">验证码已发送至 +86 {{ phoneData }}</view>
|
||||||
|
<view class="result">
|
||||||
|
<view class="security-code-wrap">
|
||||||
|
<view class="code" for="code">
|
||||||
|
<view class="security-code-container">
|
||||||
|
<view class="field-wrap" a:for="{{number}}" a:for-index="index">
|
||||||
|
<text class="char-field">{{ value[index] || placeholder }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<input class="input-code" onBlur="handleInput" onInput="bindValueInput" id="code" type="text" maxlength="6"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="span" a:if="{{show}}">{{count}}秒后可重新获取验证码</view>
|
||||||
|
<view a:else @click="getCode()" class="getCode">获取验证码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提示框 -->
|
||||||
|
<view class="addr-select-bg" a:if="{{isToast}}"></view>
|
||||||
|
<view class="toast" a:if="{{isToast}}">
|
||||||
|
<view>{{toastText}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
|
@ -0,0 +1,94 @@
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
phoneData: "", //手机号
|
||||||
|
verification: "", //验证码
|
||||||
|
value: "",
|
||||||
|
show: false, //显示获取验证码
|
||||||
|
count: "", //剩余时间
|
||||||
|
timer: null,
|
||||||
|
userType: 0,
|
||||||
|
placeholder:'-',
|
||||||
|
number:6,
|
||||||
|
code:'',
|
||||||
|
isToast: false,
|
||||||
|
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
this.setData({
|
||||||
|
phoneData: options.phone,
|
||||||
|
code: options.code,
|
||||||
|
})
|
||||||
|
|
||||||
|
dd.setNavigationBar({
|
||||||
|
title: '手机验证码',
|
||||||
|
backgroundColor: '#FFFFFF',
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!this.data.timer) {
|
||||||
|
this.setData({
|
||||||
|
count: 60,
|
||||||
|
show: true
|
||||||
|
})
|
||||||
|
let that = this;
|
||||||
|
const countDown = setInterval(() => {
|
||||||
|
if(that.data.count <= 1){
|
||||||
|
that.setData({
|
||||||
|
count:60,
|
||||||
|
show: false
|
||||||
|
})
|
||||||
|
clearInterval(countDown)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
that.data.count --
|
||||||
|
that.setData({
|
||||||
|
count: that.data.count,
|
||||||
|
show: true
|
||||||
|
})
|
||||||
|
},1000);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取验证码
|
||||||
|
bindValueInput(e){
|
||||||
|
this.setData({
|
||||||
|
value: e.detail.value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 输入完成获取数据
|
||||||
|
handleInput() {
|
||||||
|
console.log(this.data.code,this.data.value,25252525)
|
||||||
|
|
||||||
|
if(this.data.code == this.data.value){
|
||||||
|
this.hideKeyboard();
|
||||||
|
}else{
|
||||||
|
this.setData({
|
||||||
|
value: '',
|
||||||
|
toastText: '验证码错误',
|
||||||
|
isToast: true
|
||||||
|
});
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
isToast: false
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 登录
|
||||||
|
hideKeyboard() {
|
||||||
|
let params = {
|
||||||
|
phone: this.data.phoneData,
|
||||||
|
sms_code: this.data.value,
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/user/bind-phone',params).then(res=>{
|
||||||
|
console.log(res,'绑定数据')
|
||||||
|
if (res.code == 0) {
|
||||||
|
// 跳转页面
|
||||||
|
dd.navigateTo ({
|
||||||
|
url: '/pages/home/home'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,361 @@
|
||||||
|
input::-webkit-input-placeholder,
|
||||||
|
textarea::-webkit-input-placeholder{
|
||||||
|
color: #dedede;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
border-top: .02rem solid #FAFAFA;
|
||||||
|
}
|
||||||
|
.addr-select-bg{
|
||||||
|
width: 100vw;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
||||||
|
.login-txt{
|
||||||
|
padding: 0.4rem;
|
||||||
|
min-height: 6.6rem;
|
||||||
|
}
|
||||||
|
.login-txt .logo{
|
||||||
|
width: 1.4rem;
|
||||||
|
height: 1.4rem;
|
||||||
|
background-color: #e70012;
|
||||||
|
border-radius: .1rem;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: .5rem auto .1rem;
|
||||||
|
}
|
||||||
|
.login-txt .logo>view{
|
||||||
|
width: 1.2rem;
|
||||||
|
height: 1.2rem;
|
||||||
|
margin: .1rem auto;
|
||||||
|
}
|
||||||
|
.login-txt .logo>view image{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.login-txt .company{
|
||||||
|
font-size: .48rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: .7rem;
|
||||||
|
}
|
||||||
|
.login-txt .phone-number{
|
||||||
|
padding-top: .2rem;
|
||||||
|
}
|
||||||
|
.login-txt .phone-number>view{
|
||||||
|
display: block;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.login-txt .phone-number>input{
|
||||||
|
width: 100%;
|
||||||
|
height: .9rem;
|
||||||
|
line-height: .9rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
border-bottom: .02rem solid #e2e4e6;
|
||||||
|
}
|
||||||
|
.login-txt .agreement{
|
||||||
|
padding-top: .2rem;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.login-txt .agreement>.img{
|
||||||
|
display: block;
|
||||||
|
width: .26rem;
|
||||||
|
height: .26rem;
|
||||||
|
border-radius: .04rem;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border: .02rem solid #999999;
|
||||||
|
margin: .07rem .08rem 0 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.login-txt .agreement>.img>image{
|
||||||
|
display: none;
|
||||||
|
width: .18rem;
|
||||||
|
height: .13rem;
|
||||||
|
margin: .045rem auto 0;
|
||||||
|
}
|
||||||
|
.login-txt .agreement>.img.checked{
|
||||||
|
border: .02rem solid #3440c9;
|
||||||
|
background-color: #3440c9;
|
||||||
|
}
|
||||||
|
.login-txt .agreement>.img.checked>image{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.login-txt .agreement>.txt{
|
||||||
|
width: calc(100% - .34rem);
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.login-txt .agreement>.txt text{
|
||||||
|
word-break: break-all;
|
||||||
|
color: #3440c9;
|
||||||
|
}
|
||||||
|
.login-btns{
|
||||||
|
margin-top: .3rem;
|
||||||
|
}
|
||||||
|
.login-btns>view{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: .8rem;
|
||||||
|
background-color: #3440c9;
|
||||||
|
border-radius: .16rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.login-btns>view.nail-btn{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: #348bff;
|
||||||
|
}
|
||||||
|
.login-btns>view.nail-btn>.img{
|
||||||
|
width: .4rem;
|
||||||
|
height: .52rem;
|
||||||
|
margin-right: .08rem;
|
||||||
|
}
|
||||||
|
.login-btns>view.nail-btn>.img image{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 登录方式 */
|
||||||
|
.login-mode{
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 2rem;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
position: fixed;
|
||||||
|
bottom: .4rem;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.login-mode.noPositin{
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
.mode-title{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: .32rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.mode-title>view{
|
||||||
|
width: .9rem;
|
||||||
|
height: .02rem;
|
||||||
|
background-color: #d3d3d3;
|
||||||
|
margin: 0 .1rem;
|
||||||
|
}
|
||||||
|
.mode-item{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: .3rem;
|
||||||
|
}
|
||||||
|
.mode-item>view{
|
||||||
|
width: 1.8rem;
|
||||||
|
}
|
||||||
|
.mode-item>view>.img{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 1.2rem;
|
||||||
|
height: 1.2rem;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-radius: 100%;
|
||||||
|
background-color: #348bff;
|
||||||
|
}
|
||||||
|
.mode-item>view>.img view{
|
||||||
|
width: .58rem;
|
||||||
|
height: .76rem;
|
||||||
|
}
|
||||||
|
.mode-item>view>.img view image{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.mode-item>view:last-child>view{
|
||||||
|
background-color: #ff9834;
|
||||||
|
}
|
||||||
|
.mode-item>view:last-child>.img view{
|
||||||
|
width: .51rem;
|
||||||
|
height: .72rem;
|
||||||
|
}
|
||||||
|
.mode-item>view>text{
|
||||||
|
display: block;
|
||||||
|
width: 1.8rem;
|
||||||
|
height: .44rem;
|
||||||
|
line-height: .44rem;
|
||||||
|
background-color: #dbeaff;
|
||||||
|
border-radius: .1rem;
|
||||||
|
border: .02rem solid #3440c9;
|
||||||
|
font-size: .24rem;
|
||||||
|
margin-top: .12rem;
|
||||||
|
text-align: center;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.mode-item>view>text.active{
|
||||||
|
opacity: 1;
|
||||||
|
transition: all .6s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 弹窗 */
|
||||||
|
.my-confirm-bg{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 阅读授权弹窗 */
|
||||||
|
.my-confirm2>p{
|
||||||
|
text-align: center !important;
|
||||||
|
font-size: .32rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.my-confirm-bg{
|
||||||
|
width: 100vw;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
||||||
|
.my-confirm{
|
||||||
|
width: 4rem;
|
||||||
|
padding: .4rem .3rem;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-radius: .3rem;
|
||||||
|
box-shadow: 0 0 .13rem rgba(29,47,67,.1);
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.my-confirm>text{
|
||||||
|
display: block;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.confirm-btns{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
margin-top: .4rem;
|
||||||
|
}
|
||||||
|
.confirm-btns>view{
|
||||||
|
width: 1.6rem;
|
||||||
|
line-height: .5rem;
|
||||||
|
border-radius: .25rem;
|
||||||
|
border: .02rem solid #333fc9;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
font-size: .26rem;
|
||||||
|
color: #333fc9;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.confirm-btns>view:first-child{
|
||||||
|
background-color: #333fc9;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 钉钉授权登录弹窗 */
|
||||||
|
.nail-popup{
|
||||||
|
width: 100%;
|
||||||
|
padding: .65rem;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.nail-popup-title{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: .64rem;
|
||||||
|
}
|
||||||
|
.nail-popup-title>.img{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: .64rem;
|
||||||
|
height: .64rem;
|
||||||
|
border-radius: .12rem;
|
||||||
|
background-color: #e70012;
|
||||||
|
}
|
||||||
|
.nail-popup-title>.img view{
|
||||||
|
width: .55rem;
|
||||||
|
height: .55rem;
|
||||||
|
}
|
||||||
|
.nail-popup-title>.img view image{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.nail-popup-title>.txt{
|
||||||
|
font-size: .48rem;
|
||||||
|
line-height: .64rem;
|
||||||
|
margin: 0 .08rem;
|
||||||
|
}
|
||||||
|
.nail-popup-title>text{
|
||||||
|
font-size: .32rem;
|
||||||
|
}
|
||||||
|
.nail-popup>text{
|
||||||
|
display: block;
|
||||||
|
font-size: .42rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
margin: .2rem 0;
|
||||||
|
}
|
||||||
|
.nick-name>view{
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
.nick-name>view{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
font-size: .32rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
padding: .15rem 0;
|
||||||
|
border-bottom: .02rem solid #e1e3e5;
|
||||||
|
}
|
||||||
|
.nick-name>view>view{
|
||||||
|
width: .35rem;
|
||||||
|
height: .24rem;
|
||||||
|
}
|
||||||
|
.nick-name>view>view image{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
/* 授权按钮 */
|
||||||
|
.nail-popup-btns view{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: .8rem;
|
||||||
|
margin-top: .4rem;
|
||||||
|
background-color: #348bff;
|
||||||
|
border-radius: .16rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.nail-popup-btns view:last-child{
|
||||||
|
margin-top: .15rem;
|
||||||
|
background-color: rgba(0,0,0,0);
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
/* 提示框 */
|
||||||
|
.toast{
|
||||||
|
width: 3rem;
|
||||||
|
padding: .2rem .25rem;
|
||||||
|
background-color: rgba(255,255,255,.8);
|
||||||
|
color: #333333;
|
||||||
|
border-radius: .1rem;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
text-align: center;
|
||||||
|
position: fixed;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
<view>
|
||||||
|
<view class="content">
|
||||||
|
<view class="login pull-content list-section">
|
||||||
|
<view class="login-txt">
|
||||||
|
<view class="logo">
|
||||||
|
<view>
|
||||||
|
<image mode="widthFix" src="/static/login/logo.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="company">有谱志愿</view>
|
||||||
|
<view class="phone-number" a:if="{{!isMode}}">
|
||||||
|
<view>手机号</view>
|
||||||
|
<input type="input" onInput="bindKeyInput" onBlur="myBlur" onFocus="myFocus" placeholder="请输入手机号"/>
|
||||||
|
</view>
|
||||||
|
<view class="agreement">
|
||||||
|
<view class="{{isChecked?'img checked':'img'}}" onTap="changeChecked">
|
||||||
|
<image mode="widthFix" src="/static/login/yes.png" />
|
||||||
|
</view>
|
||||||
|
<view class="txt">
|
||||||
|
我已阅读并同意<text>《有谱志愿用户协议》</text>、<text>《隐私政策》</text>,未注册将引导完成账号注册
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="login-btns">
|
||||||
|
<view onTap="nailLogin" class="nail-btn" a:if="{{isMode}}">
|
||||||
|
<view class="img">
|
||||||
|
<image mode="widthFix" src="/static/login/nail.png" />
|
||||||
|
</view>
|
||||||
|
<view>钉钉授权登录</view>
|
||||||
|
</view>
|
||||||
|
<view onTap="checkPhone" a:if="{{!isMode}}">获取验证码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="{{noPositin ?'login-mode noPositin':'login-mode'}}">
|
||||||
|
<view class="mode-title"><view></view>其他登录方式<view></view></view>
|
||||||
|
<view class="mode-item">
|
||||||
|
<view onTap="changeMode">
|
||||||
|
<view class="img">
|
||||||
|
<view>
|
||||||
|
<image mode="widthFix" src="/static/login/nail.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<text class="{{isMode?'active':''}}">当前登录方式</text>
|
||||||
|
</view>
|
||||||
|
<view onTap="changeMode">
|
||||||
|
<view class="img">
|
||||||
|
<view>
|
||||||
|
<image mode="widthFix" src="/static/login/phone.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<text class="{{isMode?'':'active'}}">当前登录方式</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提示框 -->
|
||||||
|
<view class="addr-select-bg" a:if="{{openAgreement}}"></view>
|
||||||
|
<view class="toast" a:if="{{openAgreement}}">
|
||||||
|
<text>您还未阅读并同意授权!</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 钉钉授权登录弹窗 -->
|
||||||
|
<view class="addr-select-bg" a:if="{{openEmpower}}"></view>
|
||||||
|
<view class="nail-popup" a:if="{{openEmpower}}">
|
||||||
|
<view class="nail-popup-title">
|
||||||
|
<view class="img">
|
||||||
|
<view>
|
||||||
|
<image mode="widthFix" src="/static/login/logo.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="txt">有谱志愿</view>
|
||||||
|
<text>申请</text>
|
||||||
|
</view>
|
||||||
|
<text>获取您的钉钉昵称</text>
|
||||||
|
<view class="nick-name">
|
||||||
|
<text>钉钉昵称</text>
|
||||||
|
<view>
|
||||||
|
{{nickName}}
|
||||||
|
<view>
|
||||||
|
<image a:if="{{nickName}}" mode="widthFix" src="/static/login/green-yes.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="nail-popup-btns">
|
||||||
|
<view onTap="isEmpower">同意</view>
|
||||||
|
<view onTap="noEmpower">拒绝</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提示框 -->
|
||||||
|
<view class="addr-select-bg" a:if="{{isToast}}"></view>
|
||||||
|
<view class="toast" a:if="{{isToast}}">
|
||||||
|
<view>{{toastText}}</view>
|
||||||
|
</view>
|
||||||
|
<!-- 手机验证弹窗 -->
|
||||||
|
<view class="my-confirm-bg" a:if="{{openPhoneTips}}"></view>
|
||||||
|
<view class="my-confirm my-confirm2" a:if="{{openPhoneTips}}">
|
||||||
|
<text>{{tipsMsg}}</text>
|
||||||
|
<view class="confirm-btns">
|
||||||
|
<view onTap="phoneLogin">是</view>
|
||||||
|
<view onTap="closePhone">否</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
|
@ -0,0 +1,201 @@
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
tipsMsg: '',
|
||||||
|
toastText: '',
|
||||||
|
isChecked: true,
|
||||||
|
isToast: false,
|
||||||
|
isMode: true, //登录方式
|
||||||
|
openAgreement: false, //阅读协议弹窗
|
||||||
|
isAgreement: true, //阅读协议状态
|
||||||
|
openEmpower: false, //钉钉授权状态
|
||||||
|
openPhoneTips: false, //验证手机号弹出框
|
||||||
|
phoneNumber: "",
|
||||||
|
phone: "",
|
||||||
|
noPositin: false,
|
||||||
|
|
||||||
|
defaultPhoneHeight : '0', //默认屏幕高度
|
||||||
|
nowPhoneHeight : '0', //实时屏幕高度
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
dd.setNavigationBar({
|
||||||
|
title: '登录',
|
||||||
|
backgroundColor: '#FFFFFF',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
changeChecked(){
|
||||||
|
if(this.data.isChecked == false){
|
||||||
|
this.setData({
|
||||||
|
isChecked: true
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.setData({
|
||||||
|
isChecked: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
changeMode(){
|
||||||
|
if(this.data.isMode == false){
|
||||||
|
this.setData({
|
||||||
|
isMode: true
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.setData({
|
||||||
|
isMode: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nailLogin(){
|
||||||
|
if(this.data.isChecked){
|
||||||
|
this.setData({
|
||||||
|
openEmpower: true
|
||||||
|
})
|
||||||
|
// 获取免登码
|
||||||
|
dd.getAuthCode({
|
||||||
|
success:(res)=>{
|
||||||
|
// 登录
|
||||||
|
let params = {
|
||||||
|
code: res.authCode,
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/user/login',params).then(res=>{
|
||||||
|
console.log(res,'登录认证数据')
|
||||||
|
this.setData({
|
||||||
|
nickName: res.data.nickName,
|
||||||
|
phoneNumber: res.data.mobile
|
||||||
|
})
|
||||||
|
|
||||||
|
// 缓存token
|
||||||
|
dd.$toolAll.setCache('token',res.data.token);
|
||||||
|
// 缓存用户信息
|
||||||
|
dd.$toolAll.setCache('userinfo',res.data);
|
||||||
|
dd.$toolAll.setCache('centerUserData',res.data);
|
||||||
|
dd.$toolAll.setCache('userData',res.data);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
fail: (err)=>{
|
||||||
|
dd.alert({
|
||||||
|
content: JSON.stringify(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.setData({
|
||||||
|
openAgreement: true
|
||||||
|
})
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
openAgreement: false
|
||||||
|
})
|
||||||
|
}, 1500)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isEmpower(){
|
||||||
|
this.setData({
|
||||||
|
openEmpower: false
|
||||||
|
})
|
||||||
|
if(dd.$toolAll.getCache('userinfo').mobile !== ''){
|
||||||
|
// 跳转页面
|
||||||
|
dd.navigateTo ({
|
||||||
|
url: '/pages/home/home'
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
// 跳转到绑定手机号页面
|
||||||
|
dd.navigateTo ({
|
||||||
|
url: '/pages/login/bind/bind'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
noEmpower(){
|
||||||
|
//删除缓存
|
||||||
|
dd.$toolAll.removeCache('token');
|
||||||
|
dd.$toolAll.removeCache('userinfo');
|
||||||
|
dd.$toolAll.removeCache('centerUserData');
|
||||||
|
dd.$toolAll.removeCache('userData');
|
||||||
|
this.setData({
|
||||||
|
openEmpower: false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
closePhone(){
|
||||||
|
this.setData({
|
||||||
|
phoneNumber: '',
|
||||||
|
openPhoneTips: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
bindKeyInput(e) {
|
||||||
|
this.setData({
|
||||||
|
phoneNumber: e.detail.value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
myFocus(){
|
||||||
|
this.setData({
|
||||||
|
noPositin: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
myBlur(){
|
||||||
|
this.setData({
|
||||||
|
noPositin: false,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 手机号登录
|
||||||
|
// 验证手机号是否存在
|
||||||
|
checkPhone(){
|
||||||
|
console.log(this.data.phoneNumber,123)
|
||||||
|
let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
|
||||||
|
if (this.data.phoneNumber == "") {
|
||||||
|
this.setData({
|
||||||
|
toastText: '请填写您的手机号!',
|
||||||
|
isToast: true
|
||||||
|
})
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
isToast: false
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
return false;
|
||||||
|
} else if (!reg_tel.test(this.data.phoneNumber)) {
|
||||||
|
this.setData({
|
||||||
|
toastText: '请正确填写您的手机号!',
|
||||||
|
isToast: true
|
||||||
|
})
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
isToast: false
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let params = {
|
||||||
|
phone: this.data.phoneNumber
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/user/has-phone-user',params).then(res=>{
|
||||||
|
console.log(res,'登录认证数据')
|
||||||
|
if(res.data.registered == 0){
|
||||||
|
this.phoneLogin();
|
||||||
|
}else if(res.data.registered == 1){
|
||||||
|
this.setData({
|
||||||
|
openPhoneTips: true,
|
||||||
|
tipsMsg: '账号已存在,是否继续登录'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 手机号登录
|
||||||
|
phoneLogin() {
|
||||||
|
let params = {
|
||||||
|
phone: this.data.phoneNumber,
|
||||||
|
type: "login",
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/common/send-sms-captcha',params).then(res=>{
|
||||||
|
console.log(res,'验证码数据')
|
||||||
|
// 跳转页面
|
||||||
|
dd.navigateTo ({
|
||||||
|
url: '/pages/login/verification/verification?phone='+this.data.phoneNumber+'&code='+res.data.code
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
input::-webkit-input-placeholder,
|
||||||
|
textarea::-webkit-input-placeholder{
|
||||||
|
color: #dedede;
|
||||||
|
}
|
||||||
|
/* 手机验证码 */
|
||||||
|
.verification-txt{
|
||||||
|
padding: 1.2rem .4rem 0;
|
||||||
|
border-top: .02rem solid #FAFAFA;
|
||||||
|
}
|
||||||
|
.verification-txt>.p{
|
||||||
|
font-size: .4rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.verification-txt>.span{
|
||||||
|
display: block;
|
||||||
|
font-size: .26rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #999999;
|
||||||
|
margin-top: .2rem;
|
||||||
|
}
|
||||||
|
/* 输入验证码 */
|
||||||
|
.security-code-wrap {
|
||||||
|
overflow: hidden;
|
||||||
|
padding: .2rem 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.security-code-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 5.32rem;
|
||||||
|
}
|
||||||
|
.field-wrap {
|
||||||
|
list-style: none;
|
||||||
|
display: block;
|
||||||
|
width: .72rem;
|
||||||
|
height: 1rem;
|
||||||
|
line-height: 1rem;
|
||||||
|
font-size: .64rem;
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: .02rem solid #e0e2e4;
|
||||||
|
}
|
||||||
|
.char-field {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
.input-code {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 5.32rem;
|
||||||
|
height: 1rem;
|
||||||
|
opacity: 0;
|
||||||
|
overflow: visible;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 重获验证码 */
|
||||||
|
.getCode{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: .8rem;
|
||||||
|
margin-top: .4rem;
|
||||||
|
background-color: #348bff;
|
||||||
|
border-radius: .16rem;
|
||||||
|
font-size: .32rem;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 提示框 */
|
||||||
|
.toast{
|
||||||
|
width: 3rem;
|
||||||
|
padding: .2rem .25rem;
|
||||||
|
background-color: rgba(255,255,255,.8);
|
||||||
|
color: #333333;
|
||||||
|
border-radius: .1rem;
|
||||||
|
font-size: .28rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
text-align: center;
|
||||||
|
position: fixed;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.addr-select-bg{
|
||||||
|
width: 100vw;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0,.5);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 998;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
<view>
|
||||||
|
<view class="verification pull-content list-section">
|
||||||
|
<view class="verification-txt">
|
||||||
|
<view class="p">输入验证码</view>
|
||||||
|
<view class="span">验证码已发送至 +86 {{ phoneData }}</view>
|
||||||
|
<view class="result">
|
||||||
|
<view class="security-code-wrap">
|
||||||
|
<view class="code" for="code">
|
||||||
|
<view class="security-code-container">
|
||||||
|
<view class="field-wrap" a:for="{{number}}" a:for-index="index">
|
||||||
|
<text class="char-field">{{ value[index] || placeholder }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<input class="input-code" onBlur="handleInput" onInput="bindValueInput" id="code" type="text" maxlength="6"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="span" a:if="{{show}}">{{count}}秒后可重新获取验证码</view>
|
||||||
|
<view a:else @click="getCode()" class="getCode">获取验证码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提示框 -->
|
||||||
|
<view class="addr-select-bg" a:if="{{isToast}}"></view>
|
||||||
|
<view class="toast" a:if="{{isToast}}">
|
||||||
|
<view>{{toastText}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
|
@ -0,0 +1,99 @@
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
phoneData: "", //手机号
|
||||||
|
verification: "", //验证码
|
||||||
|
value: "",
|
||||||
|
show: false, //显示获取验证码
|
||||||
|
count: "", //剩余时间
|
||||||
|
timer: null,
|
||||||
|
userType: 0,
|
||||||
|
placeholder:'-',
|
||||||
|
number:6,
|
||||||
|
code:'',
|
||||||
|
isToast: false,
|
||||||
|
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
this.setData({
|
||||||
|
phoneData: options.phone,
|
||||||
|
code: options.code,
|
||||||
|
})
|
||||||
|
|
||||||
|
dd.setNavigationBar({
|
||||||
|
title: '手机验证码',
|
||||||
|
backgroundColor: '#FFFFFF',
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!this.data.timer) {
|
||||||
|
this.setData({
|
||||||
|
count: 60,
|
||||||
|
show: true
|
||||||
|
})
|
||||||
|
let that = this;
|
||||||
|
const countDown = setInterval(() => {
|
||||||
|
if(that.data.count <= 1){
|
||||||
|
that.setData({
|
||||||
|
count:60,
|
||||||
|
show: false
|
||||||
|
})
|
||||||
|
clearInterval(countDown)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
that.data.count --
|
||||||
|
that.setData({
|
||||||
|
count: that.data.count,
|
||||||
|
show: true
|
||||||
|
})
|
||||||
|
},1000);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取验证码
|
||||||
|
bindValueInput(e){
|
||||||
|
this.setData({
|
||||||
|
value: e.detail.value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 输入完成获取数据
|
||||||
|
handleInput() {
|
||||||
|
if(this.data.code == this.data.value){
|
||||||
|
this.hideKeyboard();
|
||||||
|
}else{
|
||||||
|
this.setData({
|
||||||
|
value: '',
|
||||||
|
toastText: '验证码错误',
|
||||||
|
isToast: true
|
||||||
|
});
|
||||||
|
setTimeout(()=> {
|
||||||
|
this.setData({
|
||||||
|
isToast: false
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 登录
|
||||||
|
hideKeyboard() {
|
||||||
|
let params = {
|
||||||
|
phone: this.data.phoneData,
|
||||||
|
sms_code: this.data.value,
|
||||||
|
}
|
||||||
|
dd.$http.post('/api/user/login-by-Phone',params).then(res=>{
|
||||||
|
console.log(res,'登录认证数据')
|
||||||
|
|
||||||
|
if (res.code == 0) {
|
||||||
|
// 缓存token
|
||||||
|
dd.$toolAll.setCache('token',res.data.token);
|
||||||
|
// 缓存用户信息
|
||||||
|
dd.$toolAll.setCache('userinfo',res.data);
|
||||||
|
dd.$toolAll.setCache('centerUserData',res.data);
|
||||||
|
dd.$toolAll.setCache('userData',res.data);
|
||||||
|
// 跳转页面
|
||||||
|
dd.navigateTo ({
|
||||||
|
url: '/pages/home/home'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
<view>
|
||||||
|
New Page
|
||||||
|
</view>
|
|
@ -0,0 +1,4 @@
|
||||||
|
Page({
|
||||||
|
data: {},
|
||||||
|
onLoad() {},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
<view>
|
||||||
|
New Page
|
||||||
|
</view>
|
|
@ -0,0 +1,4 @@
|
||||||
|
Page({
|
||||||
|
data: {},
|
||||||
|
onLoad() {},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
.start {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100vh;
|
||||||
|
position: relative;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start>image {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start>text {
|
||||||
|
display: block;
|
||||||
|
width: 1rem;
|
||||||
|
line-height: .54rem;
|
||||||
|
text-align: center;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-size: .28rem;
|
||||||
|
border-radius: .27rem;
|
||||||
|
background-color: #3f5ee0;
|
||||||
|
position: fixed;
|
||||||
|
left: .24rem;
|
||||||
|
top: 1.14rem;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
<view>
|
||||||
|
<view class="start">
|
||||||
|
<image mode="widthFix" src="/static/start.jpg" />
|
||||||
|
<text>{{timeNumber}} 秒</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
|
@ -0,0 +1,24 @@
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
timeNumber: 3
|
||||||
|
},
|
||||||
|
onShow(){
|
||||||
|
setTimeout(() => {
|
||||||
|
this.setData({
|
||||||
|
timeNumber:2
|
||||||
|
})
|
||||||
|
}, 1000);
|
||||||
|
setTimeout(() => {
|
||||||
|
this.setData({
|
||||||
|
timeNumber:1
|
||||||
|
})
|
||||||
|
}, 2000);
|
||||||
|
setTimeout(() => {
|
||||||
|
// 前往登录页
|
||||||
|
dd.redirectTo({url:'/pages/login/login'});
|
||||||
|
}, 3000);
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
|
||||||
|
},
|
||||||
|
});
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 456 KiB |
|
@ -0,0 +1,106 @@
|
||||||
|
import config from '/config/config'
|
||||||
|
const request = (method, url, options) => {
|
||||||
|
let methods = '';
|
||||||
|
let headers = {};
|
||||||
|
// console.log(dd.$toolAll.getCache('token'),'token数据');
|
||||||
|
switch (method) {
|
||||||
|
case 'get':
|
||||||
|
methods = 'GET'
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+ dd.$toolAll.getCache('token') || ''
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'post':
|
||||||
|
methods = 'POST'
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+ dd.$toolAll.getCache('token') || ''
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'postForm':
|
||||||
|
methods = 'POST'
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+ dd.$toolAll.getCache('token') || ''
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
dd.httpRequest({
|
||||||
|
url: config.BASE_URL+url,
|
||||||
|
method: methods,
|
||||||
|
data: options,
|
||||||
|
headers:headers,
|
||||||
|
success: (res) => {
|
||||||
|
if (res.status == 200) {
|
||||||
|
// 返回成功结果
|
||||||
|
resolve(res.data);
|
||||||
|
} else {
|
||||||
|
// 结果失败返回
|
||||||
|
reject(res);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
// 接口调取失败返回
|
||||||
|
reject(err);
|
||||||
|
},
|
||||||
|
complete: rest => {
|
||||||
|
// 不管成功与否都要返回
|
||||||
|
resolve(rest);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 上传文件 封装请求
|
||||||
|
const uploadFile = (url, options) => {
|
||||||
|
console.log(options)
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
dd.uploadFile({
|
||||||
|
url: config.BASE_URL+url,
|
||||||
|
filePath: options.image,
|
||||||
|
name: 'image',
|
||||||
|
fileType:'image',
|
||||||
|
formData: options,
|
||||||
|
header: {
|
||||||
|
'Content-Type': 'multipart/form-data;charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+ dd.$toolAll.getCache('token') || ''
|
||||||
|
},
|
||||||
|
success: res => {
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
let temp = JSON.parse(res.data)
|
||||||
|
if (temp.code == 0) {
|
||||||
|
resolve(temp)
|
||||||
|
} else {
|
||||||
|
reject(temp)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reject(res)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail(e) {
|
||||||
|
|
||||||
|
},
|
||||||
|
complete: () => {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
get: (url, options) => {
|
||||||
|
return request('get', url, options)
|
||||||
|
},
|
||||||
|
// JOSN格式
|
||||||
|
post: (url, options) => {
|
||||||
|
return request('post', url, options)
|
||||||
|
},
|
||||||
|
// form-data格式
|
||||||
|
postForm: (url, options) => {
|
||||||
|
return request('postForm', url, options)
|
||||||
|
},
|
||||||
|
// 上传
|
||||||
|
upload: (url, options) => {
|
||||||
|
return uploadFile(url, options)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
const toolAll = {
|
||||||
|
// 设置缓存
|
||||||
|
setCache(key,value){
|
||||||
|
dd.setStorageSync({
|
||||||
|
key: key,
|
||||||
|
data: value,
|
||||||
|
success: (res)=> {}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 执行获取缓存
|
||||||
|
getCache(key){
|
||||||
|
return dd.getStorageSync({key}).data;
|
||||||
|
},
|
||||||
|
//执行删除缓存
|
||||||
|
removeCache(key){
|
||||||
|
return dd.removeStorage({key}).data;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 手机号验证
|
||||||
|
isPhone(phone){
|
||||||
|
// 手机号正则表达式
|
||||||
|
let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
|
||||||
|
if(!reg_tel.test(phone)){
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
}
|
||||||
|
export default toolAll;
|
|
@ -0,0 +1,26 @@
|
||||||
|
import config from '/config/config'
|
||||||
|
export default {
|
||||||
|
$http(url, method, data,token) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
dd.httpRequest({
|
||||||
|
url: config.BASE_URL+url,
|
||||||
|
method: method,
|
||||||
|
data: data,
|
||||||
|
headers:{
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+token || ''
|
||||||
|
},
|
||||||
|
success: (res) => {
|
||||||
|
if (res.status == 200) {
|
||||||
|
resolve(res);
|
||||||
|
} else {
|
||||||
|
reject(res);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: () => {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|