You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

270 lines
7.8 KiB

//获取应用实例
const app = getApp()
Page({
data: {
mobile:'',
code:'',
text:'',
mobile_lock:0,
mobile_count:60,
isLogin:false
},
//事件处理函数
inputMobile:function(e){//输入手机号事件监听
this.setData({
mobile: e.detail.value
})
console.log(e.detail.value);
},
inputCode: function (e) {//输入短信动态码事件监听
this.setData({
code: e.detail.value
})
},
getCode:function(e){//获取动态码事件监听
let mobile = this.data.mobile;
this.checkForm(mobile,'手机号','mobile');
if (this.data.mobile_lock === 0) {
this.setData({
mobile_lock:1,
});
let that=this;
wx.request({
url: app.gw.hostUrl + '/sms/code',
data: { mobileNumber: that.data.mobile,codeType:1,clientType:10 },
header: { "Content-Type": "application/json" },
method: 'GET',
dataType: 'json',
responseType: 'text',
success: function (res) {
if (res.data.code == 0) {
that.setData({
mobile_count: 60
});
wx.showToast({
title: '验证码发送成功',
icon: 'success',
duration: 2000
})
that.btnCount();
} else {
that.setData({
mobile_lock: 0
});
that.setData(
{ popErrorMsg: res.data.msg }
);
that.ohShitfadeOut();
return;
}
},
fail: function (res) { },
complete: function (res) { },
})
}
},
ohShitfadeOut() {//错误提示显示3秒后消失,清空计时器
var fadeOutTimeout = setTimeout(() => {
this.setData({ popErrorMsg: '' });
clearTimeout(fadeOutTimeout);
}, 3000);
},
btnCount() {
let that=this;
if (this.data.mobile_count == 0) {
that.setData(
{ text: "重新获取" }
);
that.setData({
mobile_lock: 0
});
clearTimeout(that.mobile_timeout);
}
else {
let count = this.data.mobile_count;
count--;
that.setData({
mobile_count: count
});
that.setData(
{ text: "重新发送(" + count.toString() + ")秒" }
);
that.mobile_timeout = setTimeout(that.btnCount, 1000);
}
},
checkForm: function (sign, title,flag) {
let that = this;
if (sign == '') {
that.setData(
{ popErrorMsg: title + "不能为空" }
);
that.ohShitfadeOut();
return false;
} else if (flag == 'mobile') {
if (!(/^1[345678]\d{9}$/.test(sign))) {
that.setData(
{ popErrorMsg: title + "格式错误,请重填" }
);
that.ohShitfadeOut();
return false;
}
}
},
bindFormSubmit: function (e) {//点击登录事件监听
let that = this;
let mobile = this.data.mobile;
let code = this.data.code;
let str = JSON.stringify(e.currentTarget.dataset.item);
var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面
console.log(mobile);
let checkMobile = that.checkForm(mobile,'手机号','mobile');
if(checkMobile!=false){
let checkCode = that.checkForm(code,'验证码','code');
if(checkCode!=false){
if(that.data.isLogin==false){
that.setData({
isLogin: true
})
// 获取用户信息
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
app.globalData.userInfo = res.userInfo
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (app.globalData.openid != undefined && app.globalData.openid !=""){
that.commitUserInfo(app.globalData.openid, res.encryptedData, res.iv);
};
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (app.userInfoReadyCallback) {
app.userInfoReadyCallback(res)
}
}
})
}
}
})
let user = app.globalData.userInfo;
wx.request({//获取sessionId
url: app.gw.hostUrl + '/mall/wxa/auth/mobile/bind',
method: 'post',
data: {
mobile: mobile,
verifyCode: code,
openid: app.globalData.openid
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function (res) {
//--init data
let data = res.data;
let status = data.code;
if (status != 0) {
that.setData(
{ popErrorMsg: data.msg }
);
that.ohShitfadeOut();
return;
}
app.globalData.sessionId = data.response.sessionId;
wx.setStorageSync('sessionId', data.response.sessionId);
console.log('sessionId : ' + data.response.sessionId);
wx.showToast({
title: '登录成功',
icon: 'success',
duration: 2000
})
wx.navigateBack({
success: function (e) {
var page = getCurrentPages().pop();
if (page == undefined || page == null) return;
console.log(page);
page.onLoad();
}
});//返回到之前页面
},
fail: function (e) {
that.setData(
{ popErrorMsg: '网络异常!err:authlogin' }
);
that.ohShitfadeOut();
},
});
}
}
}
},
commitUserInfo: function (openid, encryptedData, iv) {
wx.request({
url: app.gw.hostUrl + '/mall/wxa/auth/userinfo',
method: 'POST',
data: {
openid: openid,
encryptedData: encryptedData,
iv: iv
},
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
success: function (res) {
//--init data
var data = res.data;
var status = data.code;
if (status != 0) {
wx.showToast({
title: data.msg,
icon: 'none',
duration: 3000
});
return false;
}
},
fail: function (e) {
wx.showToast({
title: '网络异常!err:authlogin',
icon: 'none',
duration: 2000
});
},
});
},
onLoad: function (options) {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
}
})