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();
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||