<template>
|
|
<view class="login">
|
|
<view class="login-logo">
|
|
<image class="logo" :src="configList && configList.applet_info ? configList.applet_info.paramValueImage : ''" mode="aspectFill"></image>
|
|
<image class="d" :src="configList && configList.logo_icon ? configList.logo_icon.paramValueImage : ''" mode="aspectFill"></image>
|
|
</view>
|
|
<view class="login-submit">
|
|
<up-button class="mt24" type="primary" text="手机号登录"
|
|
open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"
|
|
shape="circle" color="#FFBF60" style="margin-top: 20rpx;"></up-button>
|
|
</view>
|
|
<view class="flex-rowc">
|
|
<view>
|
|
<up-checkbox v-model="isAgree" size="29rpx" icon-size="29rpx" name="agree" usedAlone
|
|
shape="circle" activeColor="#FFBF60">
|
|
</up-checkbox>
|
|
</view>
|
|
<view class="size-26 agreement">
|
|
<text>我已阅读并同意猫爸狗妈</text>
|
|
<text @click="privacyPolicy('login_xy')" class="main-color">《注册协议》</text>
|
|
<text>与</text>
|
|
<text @click="privacyPolicy('login_ys')" class="main-color">《隐私政策》</text>
|
|
</view>
|
|
</view>
|
|
<view class="login-footer flex-rowc">
|
|
<button @click="cancelLogin" class="btn-cancel" plain>暂不登录</button>
|
|
</view>
|
|
</view>
|
|
|
|
<up-popup :show="show" @close="close" :round="10">
|
|
<view style="padding: 10rpx 20rpx;height: 50vh;overflow-y: scroll;" v-html="content"></view>
|
|
</up-popup>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getOpenIdKey,
|
|
getToken,
|
|
setIsLogin,
|
|
setOpenIdKey,
|
|
setStorage,
|
|
setToken
|
|
} from "../../utils/auth";
|
|
import {
|
|
getOpenId,
|
|
getPersonalInfo,
|
|
getPhoneNumber
|
|
} from "../../api/system/user";
|
|
import { mapGetters } from 'vuex';
|
|
|
|
export default {
|
|
name: 'AuthIndex',
|
|
data() {
|
|
return {
|
|
value: false,
|
|
show: false,
|
|
content: '',
|
|
isAgree: false
|
|
}
|
|
},
|
|
computed: {
|
|
...mapGetters(['configList'])
|
|
},
|
|
mounted() {
|
|
// 组件挂载后的逻辑
|
|
},
|
|
methods: {
|
|
// 微信授权登陆
|
|
loginWx() {
|
|
if (!this.isAgree) {
|
|
return uni.showToast({
|
|
title: '请先同意隐私协议',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
this.login()
|
|
},
|
|
|
|
login() {
|
|
uni.login({
|
|
provider: 'weixin',
|
|
success: (loginRes) => {
|
|
this.getOpenId(loginRes.code)
|
|
},
|
|
fail: function(error) {
|
|
// 授权失败处理
|
|
uni.showToast('授权失败,请授权后再试')
|
|
}
|
|
});
|
|
},
|
|
|
|
getOpenId(code) {
|
|
getOpenId(code).then(res => {
|
|
if (res.code == 200 && res.data) {
|
|
let resData = JSON.parse(res.data)
|
|
let token = resData.token;
|
|
let openId = resData.openId;
|
|
setOpenIdKey(openId)
|
|
if(token){
|
|
setToken(token)
|
|
setIsLogin(true)
|
|
this.getUserInfo()
|
|
}else{
|
|
// 如果没有token,可能需要获取手机号
|
|
uni.showToast({
|
|
title: '请授权手机号登录',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 获取用户信息
|
|
async getUserInfo() {
|
|
try {
|
|
const res = await getPersonalInfo()
|
|
if(res && (res.id || res.id === 0)){
|
|
setStorage('userInfo', res)
|
|
uni.navigateBack()
|
|
}
|
|
} catch (error) {
|
|
console.error('获取用户信息失败:', error)
|
|
}
|
|
},
|
|
|
|
// 获取token
|
|
onGetPhoneNumber(e) {
|
|
if(e.detail.errMsg=="getPhoneNumber:fail user deny"){ //用户拒绝授权
|
|
//拒绝授权后弹出一些提示
|
|
}else{ //允许授权
|
|
if(getOpenIdKey()){
|
|
this.getPhoneNumber({"openId":getOpenIdKey(),"code":e.detail.code})
|
|
}
|
|
}
|
|
},
|
|
|
|
getPhoneNumber(data){
|
|
getPhoneNumber(data).then(res=>{
|
|
if(res&&res.code==200){
|
|
let token = res.data.token
|
|
setToken(token)
|
|
setIsLogin(true)
|
|
this.getUserInfo()
|
|
} else{
|
|
uni.showToast({
|
|
icon:'error',
|
|
title:'获取手机号失败'
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
|
|
cancelLogin() {
|
|
uni.switchTab({
|
|
url: "/pages/workbenchManage/index"
|
|
})
|
|
},
|
|
|
|
close() {
|
|
this.show = false
|
|
},
|
|
|
|
privacyPolicy(key) {
|
|
this.content = this.configList && this.configList[key] ? this.configList[key].paramValueArea || "" : "";
|
|
this.show = true;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.login {
|
|
height: 100vh;
|
|
background: #ffffff;
|
|
|
|
&-logo {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
height: 504rpx;
|
|
background: linear-gradient(360deg, #FFFFFF 0%, #FFBF60 99%);
|
|
|
|
.logo {
|
|
width: 180rpx;
|
|
height: 180rpx;
|
|
}
|
|
|
|
.d {
|
|
width: 200rpx;
|
|
height: 80rpx;
|
|
margin-top: 20rpx;
|
|
}
|
|
}
|
|
|
|
&-submit {
|
|
padding: 0 76rpx;
|
|
margin: 150rpx 0 40rpx 0;
|
|
}
|
|
}
|
|
|
|
.agreement {
|
|
color: #C7C7C7;
|
|
font-size: 22rpx;
|
|
line-height: 29rpx;
|
|
}
|
|
|
|
.login-footer {
|
|
width: 100vw;
|
|
position: fixed;
|
|
bottom: 127rpx;
|
|
|
|
.btn-cancel {
|
|
color: #C7C7C7;
|
|
font-size: 30rpx;
|
|
line-height: 40rpx;
|
|
border: none;
|
|
display: inline-block;
|
|
padding: 0;
|
|
}
|
|
}
|
|
</style>
|