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

180 lines
4.1 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="container">
<view class="wechatapp">
<view class="header"></view>
</view>
<view class="auth-title">申请获取以下权限</view>
<view>
<view class="auth-subtitle">获得你的公开信息昵称头像等</view>
<view class="login-btn">
<button class="button btn-normal" @click.stop="doAuth()">授权登录</button>
</view>
</view>
<view class="no-login-btn">
<button class="button btn-normal" @click="handleCancel"></button>
</view>
</view>
</template>
<script>
import store from '@/store'
import * as LoginApi from '@/api/login'
export default {
data() {
return {
// 微信小程序登录凭证 (code)
// 提交到后端用于换取openid
code: ''
}
},
/**
* 生命周期函数--监听页面显示
*/
onLoad(options) {
if (options.code) {
this.code = options.code;
} else {
this.code = this.getQueryVariable('code');
}
this.doAuth();
},
methods: {
// 授权登录
doAuth() {
const app = this;
if (!app.code) {
app.$toast("抱歉,授权失败!");
// 跳转回原页面
setTimeout(() => {
app.$navTo('pages/user/index')
}, 1000);
return false;
}
return new Promise((resolve, reject) => {
LoginApi.mpWxAuth({
code: app.code
})
.then(result => {
// 显示登录成功
app.$toast(result.message);
// 跳转个人中心
setTimeout(() => {
app.$navTo('pages/user/index');
}, 1000);
})
.catch(err => {
store.dispatch('Logout');
app.onEmitSuccess(userInfo);
})
})
},
getQueryVariable(variable) {
const query = window.location.search.substring(1);
const vars = query.split("&");
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split("=");
if (pair[0] == variable) { return pair[1]; }
}
return (false);
},
// 将oauth提交给父级
// 这里要重新获取code, 因为上一次获取的code不能复用(会报错)
async onEmitSuccess(userInfo) {
const app = this
app.$emit('success', {
oauth: 'MP-WEIXIN', // 第三方登录类型: MP-WEIXIN
code: await app.getCode(), // 微信登录的code, 用于换取openid
userInfo // 微信用户信息
})
},
/**
* 暂不登录
*/
handleCancel() {
// 跳转回原页面
this.onNavigateBack()
},
/**
* 授权成功 跳转回原页面
*/
onNavigateBack(delta = 1) {
uni.navigateBack({
delta: Number(delta)
})
}
}
}
</script>
<style lang="scss" scoped>
.container {
padding: 0 60rpx;
font-size: 32rpx;
background: #fff;
min-height: 100vh;
}
.wechatapp {
padding: 80rpx 0 48rpx;
border-bottom: 1rpx solid #e3e3e3;
margin-bottom: 72rpx;
text-align: center;
.header {
width: 190rpx;
height: 190rpx;
border: 4rpx solid #fff;
margin: 0 auto 0;
border-radius: 50%;
overflow: hidden;
box-shadow: 2rpx 0 10rpx rgba(50, 50, 50, 0.3);
}
}
.auth-title {
color: #585858;
font-size: 34rpx;
margin-bottom: 40rpx;
}
.auth-subtitle {
color: #888;
margin-bottom: 88rpx;
font-size: 28rpx;
}
.login-btn {
padding: 0 20rpx;
.button {
height: 88rpx;
line-height: 88rpx;
background: #04be01;
color: #fff;
font-size: 30rpx;
border-radius: 12rpx;
text-align: center;
}
}
.no-login-btn {
margin-top: 24rpx;
padding: 0 20rpx;
.button {
height: 88rpx;
line-height: 88rpx;
background: #dfdfdf;
color: #fff;
font-size: 30rpx;
border-radius: 12rpx;
text-align: center;
}
}
</style>