237 lines
7.0 KiB
TypeScript
237 lines
7.0 KiB
TypeScript
import { handleShareAppMsg } from '../../utils/configs'
|
||
import { onGoH5Page } from '../../utils/getUserInfo'
|
||
import { onMaiDian } from '../../utils/maiDian'
|
||
import { apiGetCaptchaImage, apiSendSms, apiGetWxUserCode, apiLogin } from '../../api/login/index'
|
||
const H5Link = require('../../api/base').allBaseUrl.GDEnvs.web
|
||
|
||
Page({
|
||
data: {
|
||
logoUrl: '../../assets/images/login/logo.png',
|
||
checkedUrl: '../../assets/images/login/icon_check.svg',
|
||
errorIconUrl:'../../assets/images/login/error.svg',
|
||
codeUrl: '',
|
||
isChecked: false,
|
||
loginType: 'auto',
|
||
// manual
|
||
time: 60,
|
||
phone: '',
|
||
code: '',
|
||
sms: '',
|
||
uuid: '',
|
||
phoneError: false,
|
||
codeError: false,
|
||
smsError: false,
|
||
canLogin: false,
|
||
firstSend: true
|
||
},
|
||
/** 触发同意单选框 */
|
||
handleCheck() {
|
||
this.setData({ isChecked: !this.data.isChecked })
|
||
},
|
||
/** 获取图形验证码 */
|
||
async handleGetCode () {
|
||
const res = await apiGetCaptchaImage()
|
||
try {
|
||
this.setData({ codeUrl: 'data:image/gif;base64,' + res.data.img })
|
||
this.setData({ uuid: res.data.uuid })
|
||
} catch (error) {
|
||
console.log(error);
|
||
}
|
||
},
|
||
/** 发送验证码 */
|
||
async handleSendSms () {
|
||
if (!this.blurPhone()) {
|
||
wx.showToast({ title: '请填写手机号', icon: 'none' })
|
||
return
|
||
}
|
||
if (!this.data.firstSend) {
|
||
this.handleGetCode()
|
||
this.setData({ codeError: true })
|
||
this.setData({ firstSend: true })
|
||
return
|
||
}
|
||
this.setData({ codeError: false })
|
||
wx.showLoading({ title: '加载中' })
|
||
|
||
const params = {
|
||
userName: this.data.phone,
|
||
imageCode: this.data.code,
|
||
uuid: this.data.uuid
|
||
}
|
||
const smsResult = await apiSendSms(params)
|
||
if (smsResult.code === '1000') {
|
||
this.setData({ firstSend: false })
|
||
} else {
|
||
this.setData({ codeError: true })
|
||
wx.showToast({ title: smsResult.msg, icon: 'none' })
|
||
}
|
||
wx.hideLoading()
|
||
try {
|
||
this.setData({ time: this.data.time - 1 })
|
||
let timer = setInterval(() => {
|
||
if (this.data.time === 0) {
|
||
clearInterval(timer)
|
||
this.setData({ time: 60 })
|
||
return
|
||
}
|
||
this.setData({ time: this.data.time - 1 })
|
||
}, 1000)
|
||
} catch (error) {
|
||
console.log(error);
|
||
}
|
||
},
|
||
/** 跳转协议页面 */
|
||
handelJumpToProtocol(e: any) {
|
||
const url = `${H5Link}/operate/dynamic?id=${e.target.dataset.field}`
|
||
onGoH5Page({ is_need_login: false, url })
|
||
},
|
||
/** 绑定手机号输入 */
|
||
handlePhoneInput(e: { detail: { value: string } }) {
|
||
this.setData({
|
||
phone: e.detail.value
|
||
})
|
||
if (this.data.sms.length === 6 && this.data.phone.length === 11 && this.data.code.length === 4) {
|
||
this.setData({ canLogin: true })
|
||
}else{
|
||
this.setData({ canLogin: false })
|
||
}
|
||
},
|
||
handleBindCode(e: { detail: { value: string } }) {
|
||
this.setData({ code: e.detail.value })
|
||
if (this.data.sms.length === 6 && this.data.phone.length === 11 && this.data.code.length === 4) {
|
||
this.setData({ canLogin: true })
|
||
}else{
|
||
this.setData({ canLogin: false })
|
||
}
|
||
},
|
||
handleBindSms(e: { detail: { value: string } }) {
|
||
this.setData({ sms: e.detail.value })
|
||
if (this.data.sms.length === 6 && this.data.phone.length === 11 && this.data.code.length === 4) {
|
||
this.setData({ canLogin: true })
|
||
}else{
|
||
this.setData({ canLogin: false })
|
||
}
|
||
},
|
||
/** 手机号输入框失焦检查 */
|
||
blurPhone () {
|
||
const phone = this.data.phone
|
||
const reg = /^[1][3-9][0-9]{9}$/
|
||
const res = reg.test(phone)
|
||
if (!res) {
|
||
this.setData({ phoneError: true })
|
||
} else {
|
||
this.setData({ phoneError: false })
|
||
}
|
||
return res
|
||
},
|
||
/** 手动登录 */
|
||
handleManualLogin () {
|
||
onMaiDian('其他手机号登录-曝光')
|
||
this.setData({ loginType: 'manual' })
|
||
this.handleGetCode()
|
||
},
|
||
/** 手动登录提交 */
|
||
async handleManualSubmit () {
|
||
if (!this.data.canLogin) return
|
||
if (!this.data.isChecked) {
|
||
wx.showToast({ title: '请阅读并同意协议', icon: 'none' })
|
||
return
|
||
}
|
||
const that = this
|
||
wx.showLoading({ title: '加载中' })
|
||
wx.login({
|
||
success(wxRes) {
|
||
console.warn('wxRes:', wxRes)
|
||
apiGetWxUserCode({ code: wxRes.code }).then(res => {
|
||
apiLogin({
|
||
loginType: 2,
|
||
userName: that.data.phone,
|
||
smsCode: that.data.sms,
|
||
openId: res.data.openid
|
||
}).then(result => {
|
||
if (result.code === '1000') {
|
||
onMaiDian('其他手机号登录-点击-登录')
|
||
wx.setStorage({
|
||
key: 'user_info',
|
||
data: {
|
||
token: result.data.authorizeToken,
|
||
phone: result.data.phone,
|
||
userName: result.data.userName,
|
||
userId: result.data.userId,
|
||
uniqueCode: result.data.uniqueCode
|
||
},
|
||
success() {
|
||
wx.hideLoading()
|
||
wx.reLaunch({ url: '/pages/index/index' })
|
||
}
|
||
})
|
||
} else {
|
||
that.handleGetCode()
|
||
that.setData({ codeError: true })
|
||
that.setData({ smsError: true })
|
||
that.setData({ firstSend: true })
|
||
wx.showToast({ title: result.msg, icon: 'none' })
|
||
}
|
||
})
|
||
})
|
||
},
|
||
fail(wxResFail) {
|
||
console.warn('wxResFail:', wxResFail)
|
||
wx.showModal({ showCancel: true, content: wxResFail.errMsg })
|
||
}
|
||
})
|
||
},
|
||
/** 一键登录 */
|
||
bindgetrealtimephonenumber(e: any) {
|
||
if (e.detail.errno === '1400001') {
|
||
wx.showToast({ title: '登录失败,请联系客服', icon: 'error' })
|
||
return
|
||
}
|
||
if(!e.detail.code) return
|
||
wx.showLoading({ title: '加载中' })
|
||
wx.login({
|
||
success(wxRes) {
|
||
apiGetWxUserCode({ code: wxRes.code }).then(res => {
|
||
apiLogin({
|
||
loginType: 1,
|
||
openId: res.data.openid,
|
||
code: e.detail.code
|
||
}).then(result => {
|
||
if (result.code === '1000') {
|
||
onMaiDian('微信一键登录-点击-登录')
|
||
wx.setStorage({
|
||
key: 'user_info',
|
||
data: {
|
||
token: result.data.authorizeToken,
|
||
phone: result.data.phone,
|
||
userName: result.data.userName,
|
||
userId: result.data.userId,
|
||
uniqueCode: result.data.uniqueCode
|
||
},
|
||
success() {
|
||
wx.hideLoading()
|
||
wx.navigateBack({ delta: 2 })
|
||
}
|
||
})
|
||
} else {
|
||
wx.showToast({ title: result.msg, icon: 'none' })
|
||
}
|
||
})
|
||
})
|
||
}
|
||
})
|
||
},
|
||
handleUncheck() {
|
||
wx.showToast({ title: '请阅读并同意协议', icon: 'none' })
|
||
},
|
||
/**
|
||
* 用户点击右上角分享
|
||
*/
|
||
onShareAppMessage() {
|
||
handleShareAppMsg()
|
||
},
|
||
onLoad() {
|
||
wx.removeStorageSync('user_info')
|
||
onMaiDian('微信一键登录-曝光')
|
||
}
|
||
}) |