shjz-applet/pages/login/login.vue

185 lines
4.8 KiB
Vue
Raw 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>
<!-- 头部 -->
<status-nav :ifReturn="false" navBarTitle="登录" :marginBottom="0"></status-nav>
<!-- 头像 -->
<view class='login-header'>
<image class="infoImg" mode="aspectFill" :src="userInfo.avatarUrl || imgSrc"></image>
<view class="logo-name">{{appletName}}</view>
</view>
<!-- 登录 -->
<view class="login-footer">
<view class="login-btn radius20 font34" :style="{background:'#3b45b2'}" type='primary' @tap="bindGetUserInfo"></view>
<view class="agreement-box font28">如您同意授权请点击微信登录</text></view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
userInfo: {}, //用户信息
canIGetUserProfile: false,
imgSrc: '/static/public/logo.jpg', //默认logo头像
appletName:'上海集正', //小程序名称
isShowP:false,
};
},
onLoad() {
if (uni.getUserProfile) {
this.canIGetUserProfile = true;
}
},
methods: {
//暂不绑定事件
refuse(){
this.isShowP=false;
this.$toolAll.tools.showToast('登录成功','success')
uni.reLaunch({url:'/pages/index/index'})
},
//授权绑定手机号
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);
})
}
})
},
//调起登录授权
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/index/index'
})
}
}
},error => {})
}
}
}
</script>
<style>
.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 {
width: 224rpx;
height: 224rpx;
border-radius: 100%;
border: 2rpx solid #d8d8d8;
}
.logo-name {
font-size: 30rpx;
margin-top: 30rpx;
color: #262626;
text-align: center;
font-weight: bold;
}
.login-footer {
width: 100%;
text-align: center;
position: fixed;
left: 0;
bottom: 60rpx;
}
.login-btn {
width: calc(100% - 80rpx);
line-height: 98rpx;
margin: 0 auto;
color: #ffffff;
box-shadow: 0rpx 8rpx 20rpx rgba(28,47,136,.75);
letter-spacing: 4rpx;
text-indent: 4rpx;
}
.agreement-box{
margin-top: 30rpx;
color: #262626;
}
</style>