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.
170 lines
4.0 KiB
170 lines
4.0 KiB
<template>
|
|
<!-- 微信授权手机号一键登录 -->
|
|
<view class="wechat-auth">
|
|
<button class="btn-normal" open-type="getPhoneNumber" @getphonenumber="handelMpWeixinMobileLogin($event)">
|
|
<view class="wechat-auth-container">
|
|
<text class="title">手机号快捷登录</text>
|
|
</view>
|
|
</button>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import store from '@/store'
|
|
import {
|
|
isEmpty,
|
|
inArray
|
|
} from '@/utils/util'
|
|
import * as UserApi from '@/api/user'
|
|
export default {
|
|
props: {
|
|
// 分享人id
|
|
refereeId: {
|
|
type: String
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
// 微信小程序登录凭证 (code)
|
|
// 提交到后端,用于换取openid
|
|
|
|
code: '',
|
|
userInfo: {},
|
|
partyData: {
|
|
// oauth:'MP-WEIXIN'
|
|
},
|
|
isParty: true,
|
|
}
|
|
},
|
|
methods: {
|
|
|
|
// 按钮点击事件: 获取微信手机号按钮
|
|
// 实现目的: 在getphonenumber事件触发之前获取微信登录code
|
|
// 因为如果在getphonenumber事件中获取code的话,提交到后端的encryptedData会存在解密不了的情况
|
|
async clickPhoneNumber() {
|
|
this.code = await this.getCode()
|
|
},
|
|
|
|
// 微信授权获取手机号一键登录
|
|
// getphonenumber事件的回调方法
|
|
async handelMpWeixinMobileLogin({
|
|
detail
|
|
}) {
|
|
console.log("handelMpWeixinMobileLogin",detail)
|
|
const app = this
|
|
app.code = await app.getCode()
|
|
if (detail.errMsg != 'getPhoneNumber:ok') {
|
|
console.log('微信授权获取手机号失败', detail)
|
|
return
|
|
}
|
|
if (detail.errMsg == 'getPhoneNumber:ok') {
|
|
app.isLoading = true
|
|
store.dispatch('LoginMpWxMobile', {
|
|
code: app.code,
|
|
encryptedData: detail.encryptedData,
|
|
iv: detail.iv,
|
|
refereeId: this.refereeId,
|
|
isParty: app.isParty,
|
|
partyData: app.userInfo
|
|
})
|
|
.then(result => {
|
|
console.log("result",result)
|
|
// 显示登录成功
|
|
app.$toast(result.message);
|
|
app.getUserInfo()
|
|
// 相应全局事件订阅: 刷新上级页面数据
|
|
uni.$emit('syncRefresh', true)
|
|
// 跳转回原页面
|
|
setTimeout(() => app.onNavigateBack(1), 2000)
|
|
})
|
|
.catch(err => {
|
|
console.log("err",err)
|
|
const resultData = err.result.data
|
|
// 显示错误信息
|
|
if (isEmpty(resultData)) {
|
|
app.$toast(err.result.message)
|
|
}
|
|
// 跳转回原页面
|
|
if (resultData.isBack) {
|
|
setTimeout(() => app.onNavigateBack(1), 2000)
|
|
}
|
|
})
|
|
.finally(() => app.isLoading = false)
|
|
}
|
|
},
|
|
getUserInfo() {
|
|
UserApi.info()
|
|
.then(result => {
|
|
console.log("getUserInfo",result)
|
|
uni.setStorageSync('userInfo', result.data.userInfo)
|
|
})
|
|
},
|
|
// 获取微信登录的code
|
|
// https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
|
|
getCode() {
|
|
const that = this
|
|
return new Promise((resolve, reject) => {
|
|
uni.login({
|
|
provider: 'weixin',
|
|
success: res => {
|
|
console.log('code', res.code)
|
|
uni.getUserInfo({
|
|
provider: 'weixin',
|
|
success: function(info) {
|
|
console.log(info, '用户信息')
|
|
that.userInfo.nickName = info.userInfo.nickName
|
|
that.userInfo.gender = info.userInfo.gender
|
|
that.userInfo.avatarUrl = info.userInfo.avatarUrl
|
|
// if(info.userInfo){
|
|
// that.isParty = true
|
|
// }
|
|
}
|
|
})
|
|
resolve(res.code)
|
|
},
|
|
fail: reject
|
|
})
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 登录成功-跳转回原页面
|
|
*/
|
|
onNavigateBack(delta = 1) {
|
|
const pages = getCurrentPages()
|
|
if (pages.length > 1) {
|
|
uni.navigateBack({
|
|
delta: Number(delta || 1)
|
|
})
|
|
} else {
|
|
this.$navTo('pages/index/index')
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
// 微信授权登录
|
|
.wechat-auth {
|
|
width: 320rpx;
|
|
margin: 50rpx auto 0 auto;
|
|
|
|
.wechat-auth-container {
|
|
display: flex;
|
|
justify-content: center;
|
|
}
|
|
|
|
.icon {
|
|
width: 38rpx;
|
|
height: 38rpx;
|
|
margin-right: 15rpx;
|
|
}
|
|
|
|
.title {
|
|
font-size: 28rpx;
|
|
color: #666666;
|
|
}
|
|
}
|
|
</style> |