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.
yanzong_qianduan/pages/login/components/mp-weixin-mobile.vue

172 lines
4.1 KiB

1 year ago
<template>
<!-- 微信授权手机号一键登录 -->
<view class="wechat-auth">
<button class="btn-normal" open-type="getPhoneNumber" @getphonenumber="handelMpWeixinMobileLogin($event)">
<view class="wechat-auth-container">
1 year ago
<text class="title">手机号快捷登录</text>
</view>
</button>
</view>
1 year ago
</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
1 year ago
code: '',
userInfo: {},
partyData: {
// oauth:'MP-WEIXIN'
},
isParty: true,
}
1 year ago
},
methods: {
1 year ago
// 按钮点击事件: 获取微信手机号按钮
// 实现目的: 在getphonenumber事件触发之前获取微信登录code
// 因为如果在getphonenumber事件中获取code的话,提交到后端的encryptedData会存在解密不了的情况
async clickPhoneNumber() {
this.code = await this.getCode()
},
1 year ago
// 微信授权获取手机号一键登录
// 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
console.log(1111)
store.dispatch('LoginMpWxMobile', {
code: app.code,
encryptedData: detail.encryptedData,
iv: detail.iv,
refereeId: this.refereeId,
isParty: app.isParty,
partyData: app.userInfo,
refereeId: store.getters.refereeId
})
.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)
1 year ago
}
},
getUserInfo() {
UserApi.info()
.then(result => {
console.log("getUserInfo",result)
1 year ago
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
})
})
},
1 year ago
/**
* 登录成功-跳转回原页面
*/
onNavigateBack(delta = 1) {
const pages = getCurrentPages()
if (pages.length > 1) {
uni.navigateBack({
delta: Number(delta || 1)
})
} else {
this.$navTo('pages/index/index')
}
}
1 year ago
}
}
1 year ago
</script>
<style lang="scss" scoped>
// 微信授权登录
.wechat-auth {
width: 320rpx;
margin: 50rpx auto 0 auto;
1 year ago
.wechat-auth-container {
display: flex;
justify-content: center;
}
1 year ago
.icon {
width: 38rpx;
height: 38rpx;
margin-right: 15rpx;
}
1 year ago
.title {
font-size: 28rpx;
color: #666666;
}
}
</style>