189 lines
5.0 KiB
Vue
189 lines
5.0 KiB
Vue
<template>
|
||
<view>
|
||
<view class='login-header'>
|
||
<image class="infoImg" mode="aspectFill" :src="userInfo.avatarUrl || imgSrc"></image>
|
||
<view class="logo-name">{{appletName}}</view>
|
||
<view class="logo-title font24 color-99 mar-s20" style="text-align: center;">{{appleSubtitle}}</view>
|
||
</view>
|
||
<view class="login-footer">
|
||
<view class="login-btn radius20 color-ff background-blue font36" type='primary' @tap="bindGetUserInfo">微信授权</view>
|
||
<view class="agreement-box font30">如您点击授权,则表示已阅读<text @tap="toAgreement" class="agreement color-orange">《免责声明》</text></view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
export default {
|
||
data() {
|
||
return {
|
||
userInfo: {}, //用户信息
|
||
canIGetUserProfile: false,
|
||
imgSrc: '/static/logo.png', //默认logo头像
|
||
appletName:'闲置商品', //小程序名称
|
||
appleSubtitle:'发布、购买闲置商品平台',
|
||
isShowP:false,
|
||
};
|
||
},
|
||
onLoad() {
|
||
if (uni.getUserProfile) {
|
||
this.canIGetUserProfile = true;
|
||
}
|
||
},
|
||
methods: {
|
||
// 设置logo图
|
||
setLogo(){
|
||
this.$requst.get('index/base-config').then(res=>{
|
||
this.imgSrc = this.$http + res.data.logo;
|
||
this.appletName = res.data.appletName;
|
||
})
|
||
},
|
||
refuse(){//暂不绑定事件
|
||
this.isShowP=false;
|
||
this.$toolAll.tools.showToast('登录成功','success')
|
||
uni.reLaunch({url:'/pages/idle/idle'})
|
||
},
|
||
getphonenumber(e){//授权绑定手机号
|
||
let ya = this;
|
||
wx.login({
|
||
success:(res)=>{
|
||
this.$requst.post('/api/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=>{
|
||
console.log('手机号信息:',res);
|
||
if(res.code==0){
|
||
this.$toolAll.tools.showToast('手机号绑定成功');
|
||
this.isShowP = true;
|
||
} else this.$toolAll.tools.showToast(res.msg);
|
||
},error=>{})
|
||
} else {
|
||
// console.log('取消授权手机号')
|
||
}
|
||
}).catch(err=>{
|
||
console.log(err);
|
||
})
|
||
}
|
||
})
|
||
},
|
||
toAgreement(){
|
||
uni.navigateTo({
|
||
url:'/pages/login/disclaimers'
|
||
})
|
||
},
|
||
|
||
//调起登录授权
|
||
bindGetUserInfo(e) {
|
||
let ya = this;
|
||
//新版登录方式
|
||
uni.getUserProfile({
|
||
desc: '登录',
|
||
lang: 'zh_CN',
|
||
success: (res) => {
|
||
ya.userInfo = res.userInfo;
|
||
uni.login({
|
||
provider: 'weixin',
|
||
success: (res)=> {
|
||
if (res.code) {
|
||
ya.updateUserInfo(res.code);
|
||
} else {
|
||
uni.showToast({
|
||
title: '登录失败!',
|
||
duration: 2000
|
||
});
|
||
}
|
||
},
|
||
});
|
||
},
|
||
fail: (res) => {}
|
||
});
|
||
},
|
||
//调用登录接口
|
||
updateUserInfo(code) {
|
||
let ya = this;
|
||
uni.showToast({
|
||
title: '登录中...',
|
||
icon:'loading',
|
||
duration:10000
|
||
})
|
||
var params = {
|
||
code:code,
|
||
nickname: ya.userInfo.nickName,//用户昵称
|
||
headimgurl: ya.userInfo.avatarUrl,//用户头像
|
||
country: ya.userInfo.country,//用户所在国家
|
||
province: ya.userInfo.province,//用户所在省份
|
||
city: ya.userInfo.city,//用户所在城市
|
||
gender: ya.userInfo.gender,//用户性别
|
||
language:ya.userInfo.language,//语言
|
||
invite_code:uni.getStorageSync('inviteCode')?uni.getStorageSync('inviteCode'):'',
|
||
is_active:1
|
||
}
|
||
this.$requst.post('/api/user/login',params).then(res => {
|
||
if(res.code == 0){
|
||
uni.setStorageSync('userId',res.data.account_id)
|
||
uni.setStorageSync('token',res.data.token)//缓存token
|
||
uni.setStorageSync('openid',res.data.openid)//缓存openid
|
||
uni.setStorageSync('expire',res.data.expire)//缓存失效时间(时间戳格式)
|
||
uni.setStorageSync('phone_active',res.data.phone_active)//是否授权手机号
|
||
uni.setStorageSync('is_active',res.data.is_active)//是否授权头像和昵称
|
||
uni.setStorageSync('invite_code',res.data.invite_code)//缓存邀请码
|
||
if(uni.getStorageSync('page-path-options')) {
|
||
uni.reLaunch({ // 重新进入当前页面
|
||
url:uni.getStorageSync('page-path-options')
|
||
})
|
||
} else {
|
||
uni.reLaunch({
|
||
url:'/pages/idle/idle'
|
||
})
|
||
}
|
||
}
|
||
},error => {})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style scoped>
|
||
.login-header {
|
||
justify-content: center;
|
||
align-items: center;
|
||
flex-direction: column;
|
||
margin-top: 0;
|
||
position: fixed;
|
||
left: 50%;
|
||
top: 40%;
|
||
transform: translate(-50%,-50%);
|
||
}
|
||
|
||
.infoImg {
|
||
display: block;
|
||
width: 224rpx;
|
||
height: 224rpx;
|
||
border-radius: 100%;
|
||
border: 2rpx solid #d8d8d8;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.logo-name {
|
||
font-size: 30rpx;
|
||
margin-top: 20rpx;
|
||
color: #333333;
|
||
text-align: center;
|
||
}
|
||
|
||
.login-footer {
|
||
width: 100%;
|
||
text-align: center;
|
||
position: fixed;
|
||
left: 0;
|
||
bottom: 120rpx;
|
||
}
|
||
|
||
.login-btn {
|
||
width: calc(100% - 100rpx);
|
||
line-height: 90rpx;
|
||
margin: 0 auto;
|
||
box-shadow: 0rpx 8rpx 20rpx rgba(25,129,255,.5);
|
||
}
|
||
|
||
.agreement-box{
|
||
margin-top: 30rpx;
|
||
}
|
||
</style>
|