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.
 
 
 
 

149 lines
3.9 KiB

<template>
<view class="login-container">
<uni-icons type="contact-filled" size="100" color="#AFAFAF"></uni-icons>
<button type="primary" class="btn-login" open-type="getUserInfo" @getuserinfo="getUserInfo">一键登录</button>
<text class="tips-text">登录后尽享更多权益</text>
</view>
</template>
<script>
import { mapMutations, mapState } from 'vuex'
export default {
data() {
return {
};
},
computed: {
...mapState('m_user', ['redirectInfo'])
},
methods:{
...mapMutations('m_user', ['token', 'updateUserInfo', 'updateToken', 'updateUserName','updateUserId','updateAvatarUrl', 'updateRedirectInfo']),
getUserInfo(e) {
if (e.detail.errMsg === 'getUserInfo:fail auth deny') return uni.$showMsg('您取消了登录授权!')
// console.log(e.detail.userInfo)
// this.updateToken("11111")
// uni.switchTab({
// url: '/pages/index/index'
// })
this.updateUserInfo(e.detail.userInfo)
this.getToken(e.detail)
// this.getUserInfoByWX(e.detail);
},
async getToken(info) {
// 获取 code 对应的值
const [err, res] = await uni.login().catch(err => err)
if (err || res.errMsg !== 'login:ok') return uni.$showMsg('登录失败!')
// 准备参数
const query = {
code: res.code,
encryptedData: info.encryptedData,
iv: info.iv,
rawData: info.rawData,
signature: info.signature
}
const { data: loginResult } = await uni.$http.post('/small/wechat/login', query)
if (loginResult.token === "") return uni.$showMsg('登录失败!')
// 直接把 token 保存到 vuex 中
this.updateToken(loginResult.token)
this.updateUserName(loginResult.userName)
this.updateUserId(loginResult.userId)
if (loginResult.avatarUrl !=null && loginResult.avatarUrl.indexOf('http') == -1) {
loginResult.avatarUrl = uni.$http.baseUrl + loginResult.avatarUrl
}
this.updateAvatarUrl(loginResult.avatarUrl)
uni.switchTab({
url: '/pages/index/index'
})
//this.navigateBack()
},
navigateBack() {
if (this.redirectInfo && this.redirectInfo.openType === 'switchTab') {
uni.switchTab({
url: this.redirectInfo.from,
complete: () => {
this.updateRedirectInfo(null)
}
})
}
},
// 获取用户信息
getUserInfoByWX(info) {
let that = this;
uni.getSetting({
success(res) {
// 判断个球. 登录页直接拉起授权窗口
uni.showModal({
title: '授权提示',
content: '我们需要获取你的基础用户信息,请确认授权',
success: function (res) {
if (res.confirm) {
// 用户点击确定,继续授权
uni.getUserInfo({
provider: 'weixin',
success: function (infoRes) {
console.log('用户昵称为:' + infoRes.userInfo.nickName);
that.getToken(info);
}, fail (error) {
console.log('失败', error);
}
});
} else if (res.cancel) {
// 用户点击取消
console.log('用户拒绝授权');
}
}
});
}
});
}
}
}
</script>
<style lang="scss">
.login-container {
height: 750rpx;
background-color: #F8F8F8;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
overflow: hidden;
&::after {
content: ' ';
display: block;
width: 100%;
height: 40px;
background-color: white;
position: absolute;
bottom: 0;
left: 0;
border-radius: 100%;
transform: translateY(50%);
}
.btn-login {
width: 90%;
border-radius: 100px;
margin: 15px 0;
background-color: #aba9d0;
}
.tips-text {
font-size: 12px;
color: gray;
}
}
</style>