337 lines
6.9 KiB
Vue
337 lines
6.9 KiB
Vue
|
<template>
|
|||
|
<view>
|
|||
|
<u-popup :show="popupStatus" mode="center" round="10" main-class="u-authorize" customStyle="auth-class-1"
|
|||
|
custom-style="auth-class-1" :safeAreaInsetBottom="false">
|
|||
|
<view class="main">
|
|||
|
<view class="u-authorize-title">{{isAuth == 1 ? '微信授权' : '获取手机号'}}</view>
|
|||
|
<view class="u-authorize-body">
|
|||
|
<image class="u-authorize-body__icon" src="@/static/icon/phone.png" mode="aspectFit"></image>
|
|||
|
<view class="u-authorize-body__title">授权绑定您的手机号码</view>
|
|||
|
</view>
|
|||
|
<view class="u-authorize-tool">
|
|||
|
<button class="u-authorize-tool__cancel" @tap="onCancel">
|
|||
|
<view style="line-height: 100rpx;">
|
|||
|
拒绝
|
|||
|
</view>
|
|||
|
</button>
|
|||
|
<button class="u-authorize-tool__define" open-type="getPhoneNumber"
|
|||
|
@getphonenumber="authorizationPhone" @tap="onConfirm">
|
|||
|
<view style="line-height: 100rpx;color: #FFCF00;">
|
|||
|
同意
|
|||
|
</view>
|
|||
|
</button>
|
|||
|
|
|||
|
</view>
|
|||
|
|
|||
|
</view>
|
|||
|
</u-popup>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
const app = getApp();
|
|||
|
export default {
|
|||
|
name: "u-authorize",
|
|||
|
data() {
|
|||
|
return {
|
|||
|
openidInfo: null
|
|||
|
};
|
|||
|
},
|
|||
|
props: {
|
|||
|
popupStatus: [Boolean],
|
|||
|
isAuth: [Number]
|
|||
|
},
|
|||
|
created() {
|
|||
|
let openidInfo = this.$api.getCache('openidInfo');
|
|||
|
let _this = this;
|
|||
|
if (!openidInfo) {
|
|||
|
_this.miniLogin();
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
onCancel(event) {
|
|||
|
this.$emit('onAuthCancel');
|
|||
|
},
|
|||
|
onConfirm(event) {
|
|||
|
|
|||
|
},
|
|||
|
//小程序静默登录
|
|||
|
miniLogin() {
|
|||
|
let _this = this;
|
|||
|
uni.login({
|
|||
|
provider: 'weixin',
|
|||
|
success: function(res) {
|
|||
|
_this.getOpenidByCode(res.code)
|
|||
|
},
|
|||
|
fail: function(error) {
|
|||
|
console.log('authError', error);
|
|||
|
}
|
|||
|
})
|
|||
|
},
|
|||
|
//根据code获取openid
|
|||
|
getOpenidByCode(code) {
|
|||
|
let _this = this;
|
|||
|
this.$http({
|
|||
|
url: '/addons/xilufitness/login/getOpenid',
|
|||
|
data: {
|
|||
|
code: code
|
|||
|
},
|
|||
|
method: 'get'
|
|||
|
}).then(res => {
|
|||
|
if(res.code == 1){
|
|||
|
_this.openidInfo = res.data;
|
|||
|
_this.$api.setCache('openidInfo', res.data);
|
|||
|
}
|
|||
|
}).catch(error => {
|
|||
|
console.log('获取openid失败:', error);
|
|||
|
})
|
|||
|
},
|
|||
|
// 获取手机号
|
|||
|
authorizationPhone(e) {
|
|||
|
var _this = this;
|
|||
|
if (e.detail.errMsg !== "getPhoneNumber:ok") {
|
|||
|
this.$api.toast('授权失败,请重新点击授权');
|
|||
|
return false;
|
|||
|
}
|
|||
|
var openidInfo = this.$api.getCache('openidInfo');
|
|||
|
if (!openidInfo) {
|
|||
|
_this.miniLogin();
|
|||
|
this.$api.toast('未获取到信息,请重新点击授权');
|
|||
|
return false;
|
|||
|
}
|
|||
|
this.decodeMobile({
|
|||
|
encryptedData: e.detail.encryptedData,
|
|||
|
iv: e.detail.iv,
|
|||
|
sessionKey: openidInfo.session_key,
|
|||
|
}, openidInfo);
|
|||
|
},
|
|||
|
//解析手机号
|
|||
|
decodeMobile(data, openidInfo) {
|
|||
|
var _this = this;
|
|||
|
this.$api.showBarLoading();
|
|||
|
this.$http({
|
|||
|
url: '/addons/xilufitness/login/decodeData',
|
|||
|
data: data,
|
|||
|
method: 'post'
|
|||
|
}).then(res => {
|
|||
|
if(res.code == 1){
|
|||
|
_this.userRegister(res.data.phoneNumber, openidInfo.openid);
|
|||
|
} else {
|
|||
|
_this.$api.toast(res.msg || '解析手机号失败')
|
|||
|
}
|
|||
|
|
|||
|
}).catch(error => {
|
|||
|
|
|||
|
});
|
|||
|
this.$api.hideBarLoading();
|
|||
|
},
|
|||
|
//用户注册
|
|||
|
userRegister(mobile, openid) {
|
|||
|
var _this = this;
|
|||
|
this.$http({
|
|||
|
url: '/addons/xilufitness/login/registerLogin',
|
|||
|
data: {
|
|||
|
mobile: mobile,
|
|||
|
openid: openid,
|
|||
|
rec_user_id: app.globalData.share_user_id || 0
|
|||
|
},
|
|||
|
method: 'post'
|
|||
|
}).then(res => {
|
|||
|
if (res.code == 1) {
|
|||
|
_this.$api.setCache('token', res.data.token);
|
|||
|
_this.$emit('onAuthConfirm');
|
|||
|
} else {
|
|||
|
_this.$api.toast(res.msg);
|
|||
|
}
|
|||
|
}).catch(error => {
|
|||
|
console.log('error', error);
|
|||
|
_this.$api.modal('温馨提示', error.data.msg, function() {
|
|||
|
|
|||
|
}, false);
|
|||
|
});
|
|||
|
|
|||
|
},
|
|||
|
//版本比较
|
|||
|
compareVersion(v1, v2) {
|
|||
|
v1 = v1.split('.')
|
|||
|
v2 = v2.split('.')
|
|||
|
const len = Math.max(v1.length, v2.length)
|
|||
|
while (v1.length < len) {
|
|||
|
v1.push('0')
|
|||
|
}
|
|||
|
while (v2.length < len) {
|
|||
|
v2.push('0')
|
|||
|
}
|
|||
|
for (let i = 0; i < len; i++) {
|
|||
|
const num1 = parseInt(v1[i])
|
|||
|
const num2 = parseInt(v2[i])
|
|||
|
if (num1 > num2) {
|
|||
|
return 1
|
|||
|
} else if (num1 < num2) {
|
|||
|
return -1
|
|||
|
}
|
|||
|
}
|
|||
|
return 0
|
|||
|
},
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
.main {
|
|||
|
width: 600rpx;
|
|||
|
}
|
|||
|
|
|||
|
.auth-class-1 {
|
|||
|
width: 65vw !important;
|
|||
|
border-radius: 20rpx !important;
|
|||
|
overflow: hidden;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize {
|
|||
|
min-height: initial !important;
|
|||
|
max-height: inherit !important;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-title {
|
|||
|
position: relative;
|
|||
|
text-align: center;
|
|||
|
line-height: 90rpx;
|
|||
|
font-size: 34rpx;
|
|||
|
color: #000;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-title:after {
|
|||
|
content: " ";
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
width: 200%;
|
|||
|
height: 200%;
|
|||
|
border: 0 #dddddd solid;
|
|||
|
border-bottom-width: 1px;
|
|||
|
-webkit-transform: scale(.5);
|
|||
|
transform: scale(.5);
|
|||
|
-webkit-transform-origin: 0 0;
|
|||
|
transform-origin: 0 0;
|
|||
|
pointer-events: none;
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-body {
|
|||
|
padding: 40rpx 80rpx;
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-body__icon {
|
|||
|
display: block;
|
|||
|
width: 100rpx;
|
|||
|
height: 100rpx;
|
|||
|
margin: 0 auto;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-body__title {
|
|||
|
padding: 30rpx 0;
|
|||
|
font-size: 32rpx;
|
|||
|
color: #101010;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-body__info {
|
|||
|
position: relative;
|
|||
|
padding: 20rpx 0;
|
|||
|
font-size: 24rpx;
|
|||
|
color: #898989;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-body__info:after {
|
|||
|
content: " ";
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
width: 200%;
|
|||
|
height: 200%;
|
|||
|
border: 0 #dddddd solid;
|
|||
|
border-top-width: 1px;
|
|||
|
-webkit-transform: scale(.5);
|
|||
|
transform: scale(.5);
|
|||
|
-webkit-transform-origin: 0 0;
|
|||
|
transform-origin: 0 0;
|
|||
|
pointer-events: none;
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool {
|
|||
|
position: relative;
|
|||
|
display: flex;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool:after {
|
|||
|
content: " ";
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
width: 200%;
|
|||
|
height: 200%;
|
|||
|
border: 0 #dddddd solid;
|
|||
|
border-top-width: 1px;
|
|||
|
-webkit-transform: scale(.5);
|
|||
|
transform: scale(.5);
|
|||
|
-webkit-transform-origin: 0 0;
|
|||
|
transform-origin: 0 0;
|
|||
|
pointer-events: none;
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool button {
|
|||
|
position: relative;
|
|||
|
flex: 1;
|
|||
|
margin: 0;
|
|||
|
padding: 0;
|
|||
|
border: 0;
|
|||
|
width: 100%;
|
|||
|
height: 100rpx;
|
|||
|
line-height: 100rpx;
|
|||
|
font-size: 32rpx;
|
|||
|
text-align: center;
|
|||
|
border-radius: 0;
|
|||
|
-webkit-appearance: none;
|
|||
|
-webkit-text-size-adjust: 100%;
|
|||
|
box-sizing: border-box;
|
|||
|
background: transparent;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool button:after {
|
|||
|
content: " ";
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
width: 200%;
|
|||
|
height: 200%;
|
|||
|
border: 0 #dddddd solid;
|
|||
|
border-right-width: 1px;
|
|||
|
-webkit-transform: scale(.5);
|
|||
|
transform: scale(.5);
|
|||
|
-webkit-transform-origin: 0 0;
|
|||
|
transform-origin: 0 0;
|
|||
|
pointer-events: none;
|
|||
|
box-sizing: border-box;
|
|||
|
border-radius: 0;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool button:last-child:after {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool__cancel {
|
|||
|
color: #666;
|
|||
|
}
|
|||
|
|
|||
|
.u-authorize-tool__define {
|
|||
|
color: #09bb07;
|
|||
|
}
|
|||
|
|
|||
|
.u-safe-bottom {
|
|||
|
display: none !important;
|
|||
|
}
|
|||
|
</style>
|