nebula/pages/login.vue
2020-09-15 21:21:42 +08:00

201 lines
6.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-row class="wrapper verify" style="background-color: #F6F7F8;padding-top: 10%;">
<el-col :xs="24" :sm="12" :xl="12" class="verify-wrap flex-inline">
<el-form :model="user" ref="user" status-icon label-width="100px" style="width: 375px;">
<el-form-item>
<img src="~/assets/rymcu.png" alt="RYMCU" class="icon-rymcu">
</el-form-item>
<el-form-item label="账号" prop="account" :rules="[{ required: true, message: '请输入账号', trigger: 'blur' }]">
<el-input v-model="user.account" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password" :rules="[{ required: true, message: '请输入密码', trigger: 'blur' }]">
<el-input type="password" v-model="user.password" autocomplete="off" show-password></el-input>
</el-form-item>
<el-form-item>
<el-link rel="nofollow" style="float: right;" :underline="false" @click="forgetPassword">忘记密码</el-link>
</el-form-item>
<el-form-item>
<el-button style="width: 60%;" type="primary" @click="login" :loading="loginLoading">立即登录</el-button>
<el-button style="width: 32%;" @click="register">注册</el-button>
</el-form-item>
</el-form>
</el-col>
<el-col :xs="24" :sm="12" :xl="12" class="intro vditor-reset verify__sign">
<div>
<h2>欢迎来到 RYMCU</h2>
<p><a rel="nofollow" href="/">RYMCU</a> 是一个嵌入式知识共享平台专注于单片机学习</p>
<p>我们正在构建一个小众社区大家在这里相互<strong>信任</strong><em>平等 自由 奔放</em>的价值观进行分享交流最终希望大家能够找到与自己志同道合的伙伴共同成长</p>
<p>最后请大家共同爱护这个<i>自由</i>的交流环境相信这里一定是你注册过的所有社区中用户体验最好的 😍</p>
</div>
</el-col>
<el-dialog
title="找回密码"
:visible.sync="forget"
width="475px"
:before-close="hideForgetPasswordDialog"
center>
<el-form :model="forgetForm" ref="forgetForm" status-icon label-width="100px"
style="align-items: center;max-width: 375px;">
<el-form-item label="邮箱" prop="email"
:rules="[
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }]">
<el-input v-model="forgetForm.email" autocomplete="off"></el-input>
</el-form-item>
<el-form-item style="text-align: center;">
<el-button :loading="loading" @click.native="sendEmailCode" type="success">发送</el-button>
<el-button :loading="loading" @click.native="hideForgetPasswordDialog">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</el-row>
</template>
<script>
import {mapState} from 'vuex';
const Cookie = process.client ? require('js-cookie') : undefined
export default {
name: "login",
middleware: 'notAuthenticated',
data() {
return {
user: {
account: '',
password: ''
},
forgetForm: {
email: ''
},
forget: false,
loading: false,
loginLoading: false
}
},
computed: {
...mapState({
article: state => state.article.detail.data
})
},
methods: {
login() {
let _ts = this;
_ts.$refs.user.validate((valid) => {
if (valid) {
_ts.$set(_ts, 'loginLoading', true);
setTimeout(function () {
_ts.$set(_ts, 'loginLoading', false);
}, 10000);
let data = {
account: _ts.user.account,
password: _ts.user.password
}
_ts.$axios.$post('/api/console/login', data).then(function (res) {
_ts.$set(_ts, 'loginLoading', false);
if (res) {
if (res.message) {
_ts.$message(res.message);
return false;
}
let auth = {
accessToken: res.user.token,
idUser: res.user.idUser,
role: res.user.weights
}
let user = {
nickname: res.user.nickname,
avatarURL: res.user.avatarUrl
}
_ts.$store.commit('setAuth', auth) // mutating to store for client rendering
localStorage.setItem('user', JSON.stringify(user))
_ts.$store.commit('setUser', user) // mutating to store for client rendering
Cookie.set('auth', auth)
_ts.$router.push({
name: 'index'
})
}
})
} else {
return false;
}
});
},
register() {
this.$router.push(
{
name: 'register'
}
)
},
forgetPassword() {
this.forget = true;
},
hideForgetPasswordDialog() {
this.forget = false;
},
sendEmailCode() {
let _ts = this;
_ts.loading = true;
let email = _ts.forgetForm.email;
if (!email) {
return false
}
let data = {
email: email
};
_ts.$axios.$get('/api/console/get-forget-password-email', data).then(function (res) {
_ts.loading = false;
_ts.forget = false;
if (res) {
_ts.$message(res.message)
}
})
}
},
mounted() {
this.$store.commit('setActiveMenu', 'login')
}
}
</script>
<style scoped>
.icon-rymcu {
margin: 0 auto;
display: block;
height: 4rem;
}
.verify .verify-wrap {
/*width: 60%;*/
}
.flex-inline {
display: flex;
align-items: center;
}
.verify .intro {
padding: 50px;
background-color: #f1f7fe;
/*width: 40%;*/
color: #616161;
}
.verify__sign {
background-color: transparent !important;
}
.vditor-reset {
font-variant-ligatures: no-common-ligatures;
font-family: Helvetica Neue, Luxi Sans, DejaVu Sans, Tahoma, Hiragino Sans GB, Microsoft Yahei, sans-serif, Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
word-wrap: break-word;
overflow: auto;
line-height: 1.5;
font-size: 16px;
word-break: break-word;
}
</style>