You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
6.4 KiB
259 lines
6.4 KiB
<template>
|
|
<view class="nine-content-001">
|
|
<view class="login">
|
|
<view class="login-logo">
|
|
<image class="login-logo-image" lazy-load="true" src="/static/image/ninecloud-white.png"></image>
|
|
</view>
|
|
<view class="login-block">
|
|
<view class="login-type">
|
|
<span @click="onNavBarTap(0)" :class="loginType == 0?'login-type-span-alive login-type-span':'login-type-span'">
|
|
密码登录
|
|
</span>
|
|
<span @click="onNavBarTap(1)" :class="loginType == 1?'login-type-span-alive login-type-span':'login-type-span'">
|
|
短信登录
|
|
</span>
|
|
</view>
|
|
<view class="login-phone">
|
|
<image class="login-phone-image" src="/static/image/user/login-phone-blue.png"></image>
|
|
<input class="login-phone-input input" :focus="isFocus=='username'" name="phone" placeholder="请输入您的账号/手机号" v-model="userName" @confirm="loginClick"/>
|
|
</view>
|
|
<view class="nine-line-001 mlr30"></view>
|
|
<view v-if="loginType == 0" class="login-phone">
|
|
<image class="login-phone-image" src="/static/image/user/login-password-blue.png"></image>
|
|
<input class="login-phone-input input" :focus="isFocus=='password'" password placeholder="请输入您的密码" v-model="password" @confirm="loginClick"/>
|
|
</view>
|
|
<view v-if="loginType == 1" class="login-verify">
|
|
<view class="display-flex-row">
|
|
<image class="login-verify-image" src="/static/image/user/login-password-blue.png"></image>
|
|
<input class="login-verify-input input" :focus="isFocus=='verify'" placeholder="请输入验证码" v-model="verifyCode" @confirm="loginClick"/>
|
|
</view>
|
|
<view class="nine-btn-verify-001 font-size12 text-nowrap pa10" @click="verifyClick">
|
|
{{verifyText}}
|
|
</view>
|
|
</view>
|
|
<view class="nine-line-001 mlr30"></view>
|
|
<view class="ma15 mr30 text-right color-blue" @click="forgetClick">
|
|
忘记密码?
|
|
</view>
|
|
<view class="nine-btn-save-001 ma20" @click="loginClick">登 录</view>
|
|
<!--#ifndef MP-WEIXIN-->
|
|
<view class="text-center ma20">没有账号?
|
|
<span class="ml10 color-blue" @click="registerClick">
|
|
立即注册
|
|
</span>
|
|
</view>
|
|
<!--#endif-->
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import store from '@/store'
|
|
import socketStore from '@/uni_modules/vrapile-im/store'
|
|
import { getToken } from '@/utils/token'
|
|
export default {
|
|
data() {
|
|
return {
|
|
loginType: 0,
|
|
|
|
userName: "",
|
|
password: "",
|
|
|
|
verifyTimer: null,
|
|
verifyCode: "",
|
|
verifyTime: 0,
|
|
verifyText: "发送验证码",
|
|
|
|
isFocus: ""
|
|
}
|
|
},
|
|
// onBackPress(e){
|
|
// return true;
|
|
// },
|
|
onUnload() {
|
|
if(this.verifyTimer) {
|
|
clearTimeout(this.verifyTimer);
|
|
this.verifyTimer = null;
|
|
this.verifyTime = 0;
|
|
}
|
|
},
|
|
onShow(){
|
|
let loginInfo = this.$store.state.user.loginInfo;
|
|
this.loginType = loginInfo.loginType || 0;
|
|
this.userName = loginInfo.userName;
|
|
this.password = loginInfo.password;
|
|
if(!this.userName){
|
|
this.usernamefocus();
|
|
}else if(this.loginType == 0){
|
|
this.passwordfocus();
|
|
}else{
|
|
this.verifyfocus();
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
onNavBarTap (index) {
|
|
this.loginType = index;
|
|
},
|
|
verifyClick(){
|
|
if(this.verifyTime != 0){
|
|
return;
|
|
}
|
|
if(!this.isPhone(this.userName)){
|
|
this.msg("必须为有效手机号");
|
|
return;
|
|
}
|
|
|
|
this.verifyTime = 60;
|
|
this.verifyText = this.verifyTime + " S";
|
|
this.verifyTimer = setInterval(() => {
|
|
this.timeInterval();
|
|
}, 1000)
|
|
this.diyApiGet('/captchaSms', {phone: this.userName}).catch(error => {
|
|
if(this.verifyTimer) {
|
|
clearTimeout(this.verifyTimer);
|
|
this.verifyTimer = null;
|
|
this.verifyTime = 0;
|
|
}
|
|
this.verifyText = "发送验证码";
|
|
});
|
|
},
|
|
timeInterval() {
|
|
this.verifyTime--;
|
|
if (this.verifyTime > 0) {
|
|
this.verifyText = this.verifyTime + " S";
|
|
}else{
|
|
if(this.verifyTimer) {
|
|
clearInterval(this.verifyTimer);
|
|
this.verifyTimer = null;
|
|
}
|
|
this.verifyText = "发送验证码";
|
|
}
|
|
},
|
|
loginClick(){
|
|
if(!this.userName){
|
|
this.usernamefocus();
|
|
return;
|
|
}
|
|
if(this.loginType==0 && !this.password){
|
|
this.passwordfocus();
|
|
return;
|
|
}
|
|
if(this.loginType==1 && !this.verifyCode){
|
|
this.verifyfocus();
|
|
return;
|
|
}
|
|
this.loading("正在登录...");
|
|
store.dispatch('Login', {
|
|
loginType: this.loginType,
|
|
userName: this.userName.trim(),
|
|
password: this.password,
|
|
smsCode: this.verifyCode,
|
|
registerFlag: "Y"
|
|
}).then(() => {
|
|
this.loginSuccess()
|
|
}).catch(() => {
|
|
})
|
|
},
|
|
loginSuccess() {
|
|
store.dispatch('GetInfo').then(res => {
|
|
socketStore.dispatch('GetChatList', {userId: store.state.user.userInfo.userId}).then(res=>{
|
|
socketStore.dispatch('ConnSocket', { url: import.meta.env.VITE_APP_SOCKET_URL, token: getToken() });
|
|
});
|
|
this.reLaunch('/pages/home/user')
|
|
this.closeLoading()
|
|
}).catch(()=>{
|
|
this.closeLoading()
|
|
})
|
|
},
|
|
registerClick() {
|
|
this.navigateTo('/pages/user/register')
|
|
},
|
|
forgetClick() {
|
|
// this.navigateTo('/pages/user/forget')
|
|
},
|
|
usernamefocus() {
|
|
this.isFocus = "username";
|
|
},
|
|
passwordfocus() {
|
|
this.isFocus = "password";
|
|
},
|
|
verifyfocus() {
|
|
this.isFocus = "verify";
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.login{
|
|
width: 750rpx;
|
|
height: 100vh;
|
|
background-color: #55aaff;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
padding-bottom: 50rpx;
|
|
}
|
|
.login-logo{
|
|
width: 650rpx;
|
|
opacity: 0.9;
|
|
}
|
|
.login-logo-image{
|
|
width: 600rpx;
|
|
height: 160rpx;
|
|
}
|
|
.login-block{
|
|
width: 630rpx;
|
|
background-color: #FFFFFF;
|
|
border-radius: 10rpx;
|
|
margin: 40rpx 0 150rpx 0;
|
|
padding: 15rpx;
|
|
}
|
|
.login-type{
|
|
margin: 20rpx;
|
|
display: flex;
|
|
justify-content: space-around;
|
|
}
|
|
.login-type-span{
|
|
width: 280rpx;
|
|
padding: 15rpx 0;
|
|
font-size: 20px;
|
|
border-radius: 10rpx;
|
|
text-align: center;
|
|
color: gray;
|
|
background-color: #ebf7ff;
|
|
}
|
|
.login-type-span-alive{
|
|
color: #fff;
|
|
background-color: #55aaff;
|
|
}
|
|
.login-phone{
|
|
display: flex;
|
|
align-items: center;
|
|
margin: 30rpx;
|
|
padding: 20rpx 20rpx 0 0rpx;
|
|
}
|
|
.login-verify{
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin: 30rpx;
|
|
padding-top: 20rpx;
|
|
}
|
|
|
|
.login-phone-image,
|
|
.login-verify-image{
|
|
padding: 10rpx;
|
|
height: 40rpx;
|
|
width: 40rpx;
|
|
}
|
|
.login-phone-input,
|
|
.login-verify-input{
|
|
padding: 10rpx;
|
|
width: 100%;
|
|
}
|
|
|
|
</style>
|