257 lines
9.7 KiB
Vue
257 lines
9.7 KiB
Vue
<template>
|
||
<view v-if="showAuth">
|
||
<!-- 用户信息授权 -->
|
||
<view v-if="showUserInfo" @touchmove.stop.prevent="moveHandle" :class="isAnimation==2?'card-box-userinfo':''" class="auth-box">
|
||
<view :class="isAnimation==1?'card-box-userinfo':''">
|
||
<view class="auth-top">
|
||
<image :src="appletImg" mode=""></image>
|
||
<view class="auth-top-content">
|
||
<view>xxx客服代表提醒您:</view>
|
||
<view>您当前是游客身份</view>
|
||
<view>是否选择授权登录</view>
|
||
</view>
|
||
</view>
|
||
<view class="auth-center">为了给您提供更好的服务,向您申请微信头像及昵称授权。</view>
|
||
<view class="auth-bottom">
|
||
<view @tap="chooseBtn" :class="noAuthBtn?'isNyin':'noyin'" class="btn btn-no">暂不授权</view>
|
||
<view :class="yesAuthBtn?'isOyin':'noyin'" class="btn btn-yes">
|
||
<text>立即授权</text>
|
||
<button @tap="authEv" class="auth-btn">立即授权</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- 手机号授权 -->
|
||
<view v-if="showMobile" @touchmove.stop.prevent="moveHandle" class="disjcac posAll" style="z-index: 1001;">
|
||
<view class="bacf radius20 width100 tank-box">
|
||
<view class="tc tank-box-itemone">请授权绑定手机号</view>
|
||
<view class="fon28 colf pad-x30 pad-zy30 tc disjb">
|
||
<view class="pad-sx20 radius10 tank-btn" style="background-color: rgba(230, 230, 230,1);color: #000000;">暂不绑定</view>
|
||
<view class="pad-sx20 radius10 tank-btn posir pbackc">
|
||
立即绑定
|
||
<button open-type="getPhoneNumber" @getphonenumber="getphonenumber" class="posia syxzo">立即绑定</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {reportBuriedPoint} from '@/jsFile/publicAPI.js';
|
||
export default {
|
||
name:"auth-userInfo-mobileInfo",
|
||
props:{
|
||
optionObj:{//参数
|
||
type:Object,
|
||
default:()=>{
|
||
return {}
|
||
}
|
||
},
|
||
// appletImg:{//小程序头像
|
||
// type:String,
|
||
// default:'/static/public/like.png'
|
||
// },
|
||
appletName:{//小程序名称
|
||
type:String,
|
||
default:''
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
yesAuthBtn:false, // 是否点击立即授权按钮
|
||
noAuthBtn:false, // 是否点击暂不授权按钮
|
||
isAnimation:0, // 动画
|
||
showAuth:false, // 是否显示授权弹框
|
||
currentPage:'', // 当前页面路径
|
||
showMobile:true ,// 是否显示手机授权弹框
|
||
showUserInfo:false,
|
||
flag:true,
|
||
appletImg:''//小程序logo
|
||
};
|
||
},
|
||
destroyed() {
|
||
console.log('清除路径缓存');
|
||
uni.removeStorageSync('urlparams');
|
||
},
|
||
mounted() {
|
||
this.appletImg = uni.getStorageSync('appletImg');
|
||
// 转发进入:获取页面路径
|
||
let pages = getCurrentPages(); //获取加载的页面
|
||
let currentPage = pages[pages.length - 1]; //获取当前页面的对象
|
||
// console.log(currentPage.route,'获取当前页面路径');
|
||
console.log(currentPage.$page.fullPath,'获取当前页面完整路径带参数');
|
||
// console.log(currentPage.options,'获取当前页面参数');
|
||
uni.setStorageSync('urlparams',currentPage.$page.fullPath);
|
||
if(uni.getStorageSync('token')=='' || uni.getStorageSync('phone_active')==0 || uni.getStorageSync('is_active')==0){
|
||
this.loginEv(currentPage.options);
|
||
}
|
||
let pagesArr = getCurrentPages();
|
||
// console.log(pagesArr.length,'获取页面栈大小');
|
||
if(pagesArr.length==1) {
|
||
uni.setStorageSync('outside',6);
|
||
}
|
||
},
|
||
methods:{
|
||
loginEv(data){
|
||
uni.login({
|
||
provider: 'weixin',
|
||
success: (res)=> {
|
||
if (res.code) {
|
||
var params = {
|
||
code: res.code,
|
||
invite_code: data.invite_code || '', // 用户邀请码
|
||
source_code: data.source_code || '', // 渠道
|
||
channel: data.channel || ''
|
||
}
|
||
uni.request({
|
||
url: `${getApp().globalData.hostApi}user/login`,
|
||
method: 'GET',
|
||
data: params,
|
||
success: res => {
|
||
if(res.data.data.token!=''){
|
||
uni.setStorageSync('token',res.data.data.token); // 缓存token
|
||
uni.setStorageSync('openid',res.data.data.openid)//缓存openid
|
||
uni.setStorageSync('expire',res.data.data.expire); // 缓存失效时间(时间戳格式)
|
||
uni.setStorageSync('phone_active',res.data.data.phone_active); // 是否绑定手机号
|
||
uni.setStorageSync('is_active',res.data.data.is_active)//是否第一次授权
|
||
if(res.data.data.phone_active==0 || res.data.data.is_active==0) {
|
||
this.showAuth = true;
|
||
this.$requst.post('user/first-enter',{openid:res.data.data.openid,path:uni.getStorageSync('urlparams')}).then(res=>{})
|
||
} else {
|
||
uni.reLaunch({ // 重新进入当前页面
|
||
url:uni.getStorageSync('urlparams')
|
||
})
|
||
}
|
||
}
|
||
},
|
||
})
|
||
// 调用登录事件
|
||
// this.$requst.post('user/login',params).then(res => {
|
||
// if(res.code==0){console.log(params,101);} else this.$toolAll.tools.showToast(res.msg);
|
||
// },error => {
|
||
// // this.$toolAll.tools.showToast(error.msg);
|
||
// // setTimeout(()=>{
|
||
// // uni.navigateTo({url:'/pages/login/login'})
|
||
// // },2000)
|
||
// })
|
||
}
|
||
},
|
||
});
|
||
},
|
||
// 当弹框出现时,禁止底层滑动
|
||
moveHandle(){
|
||
return false
|
||
},
|
||
chooseBtn(){//暂不授权点击事件
|
||
this.noAuthBtn = true;
|
||
},
|
||
authEv(){//立即授权事件
|
||
if(this.flag) {
|
||
this.flag = false;
|
||
this.$toolAll.tools.showToast('正在调起授权...');
|
||
this.yesAuthBtn = true;
|
||
uni.getUserProfile({//调起微信授权弹框
|
||
desc: '登录',
|
||
lang: 'zh_CN',
|
||
success: (res) => {
|
||
uni.login({// 获取登录用户code
|
||
provider: 'weixin',
|
||
success: (result)=> {
|
||
uni.hideToast()
|
||
// 调用更新用户信息事件
|
||
this.updateUserInfo(result.code,res.userInfo);
|
||
},
|
||
});
|
||
},
|
||
fail: (err) => {
|
||
// console.log('用户拒绝授权');
|
||
this.yesAuthBtn = false;
|
||
}
|
||
});
|
||
} else {
|
||
this.$toolAll.tools.showToast('请勿重复点击');
|
||
}
|
||
},
|
||
// 更新用户信息事件
|
||
updateUserInfo(code,userInfo) {
|
||
uni.showToast({title: '授权中...',icon:'loading',})
|
||
var params = {
|
||
code:code,
|
||
nickname: userInfo.nickName,//用户昵称
|
||
headimgurl: userInfo.avatarUrl,//用户头像
|
||
language:userInfo.language,//语言
|
||
is_active:1,
|
||
}
|
||
this.$requst.post('user/login',params).then(res => {
|
||
if(res.code==0){
|
||
this.$toolAll.tools.showToast('授权成功...','success')
|
||
uni.setStorageSync('params',params);
|
||
uni.setStorageSync('userId',res.data.account_id); // 缓存用户id
|
||
uni.setStorageSync('token',res.data.token); // 缓存token
|
||
uni.setStorageSync('openid',res.data.openid)//缓存openid
|
||
uni.setStorageSync('expire',res.data.expire); // 缓存失效时间(时间戳格式)
|
||
uni.setStorageSync('invite_code',res.data.invite_code); // 缓存用户邀请码
|
||
uni.setStorageSync('is_active',res.data.is_active);
|
||
uni.setStorageSync('phone_active',res.data.phone_active); // 是否第一次授权
|
||
this.isAnimation++;
|
||
if(res.data.phone_active==1){
|
||
// 如果手机号已经存在,取消手机授权弹框
|
||
this.showAuth = false;
|
||
uni.setStorageSync('outside',6);//表示外界进来授权的
|
||
uni.reLaunch({ // 重新进入当前页面
|
||
url:uni.getStorageSync('urlparams')
|
||
})
|
||
} else {
|
||
// 如果手机号不存在,调起手机号授权弹框
|
||
this.showMobile = true;
|
||
}
|
||
}
|
||
})
|
||
},
|
||
getphonenumber(e){//授权绑定手机号
|
||
wx.login({
|
||
success:(res)=>{
|
||
this.$requst.post('user/login',{code:res.code}).then(result => {
|
||
if(e.detail.errMsg=="getPhoneNumber:ok"){
|
||
this.$requst.post('user/bind-phone',{openid:result.data.openid, session_key:result.data.session_key, iv:e.detail.iv,encryptedData:e.detail.encryptedData}).then(res=>{
|
||
if(res.code==0){
|
||
this.$toolAll.tools.showToast('手机号绑定成功','success');
|
||
this.showUserInfo = true;
|
||
this.showMobile = false;
|
||
uni.setStorageSync('phone_active',1);//是否第一次授权
|
||
uni.setStorageSync('outside',6);//表示外界进来授权的
|
||
// this.showAuth = false; // 关闭手机号授权弹框
|
||
// uni.reLaunch({ // 重新进入当前页面
|
||
// url:uni.getStorageSync('urlparams')
|
||
// })
|
||
}
|
||
})
|
||
}
|
||
})
|
||
}
|
||
})
|
||
},
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
.auth-box {position: fixed;top: 0;right: 0;left: 0;bottom: 0;display: flex;justify-content: center;align-items: center;z-index: 1000;}
|
||
.auth-box > view {background-color: #FFFFFF;border-radius: 10rpx;padding: 30rpx;box-shadow: 0rpx 0rpx 20rpx rgba(0,0,0,.5);margin: 0 100rpx;}
|
||
.auth-top {display: flex;}
|
||
.auth-top image {width: 96rpx;height: 96rpx;flex-shrink: 0;}
|
||
.auth-top-content {margin-left: 20rpx;}
|
||
.auth-top-content view {font-size: 28rpx;margin-top: 20rpx;color: #999999;}
|
||
.auth-top-content view:nth-child(1) {font-size: 30rpx;font-weight: bold;margin-top: 0;}
|
||
.auth-center {font-size: 28rpx;margin: 30rpx 0;border-bottom: 1rpx solid #F5F5F5;border-top: 1rpx solid #F5F5F5;padding: 20rpx 0;}
|
||
.auth-bottom {display: flex;justify-content: center;align-items: center;font-size: 24rpx;}
|
||
.btn {padding: 20rpx 60rpx;border-radius: 4rpx;}
|
||
.btn-no {color: #07ad60;background-color: #FFFFFF;border: 1rpx solid #CCCCCC;}
|
||
.btn-yes {color: #FFFFFF;background-color: #07ad60;border: 1rpx solid #07ad60;position: relative;margin-left: 20rpx;}
|
||
.auth-btn {position: absolute;top: 0;left: 0;right: 0;bottom: 0;opacity: 0;}
|
||
.isNyin{box-shadow: 0rpx 3rpx 6rpx rgba(0,0,0,.5);}
|
||
.isOyin{box-shadow: 0rpx 3rpx 6rpx rgba(0,0,0,1);}
|
||
.card-box-userinfo {transform: rotate(360deg) scale(0);transition: all 1s ease-in-out;}
|
||
</style>
|