hm-examples/components/auth/auth-userInfo-mobileInfo.vue

257 lines
9.7 KiB
Vue
Raw Permalink Blame History

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 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>