版权声明:本文为博主原创文章,喜欢的话,可以通知我后进行转载哦! https://blog.csdn.net/maidu_xbd/article/details/88566665
https://blog.csdn.net/maidu_xbd/article/details/87943243已经搭建好了vue开发环境,在本博客中,来介绍些结合element-ui实现登录注册界面。界面效果展示如下图:
实现的功能包括:
首先安装:通过npm方式进行安装(更好地和 webpack 打包工具配合使用),其他使用方式可以看官网(http://element-cn.eleme.io/#/zh-CN/component/installation)。
npm i element-ui -S
安装axios:【npm install axios --save-dev】
项目目录如下图:
路由配置:【router】->【index.js】:实现路由的配置
import Vue from 'vue'
import Router from 'vue-router'
import Personal from '@/components/Personal'
import Login from '@/components/Login'
import Register from '@/components/Register'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/personal',
name: 'Personal',
component: Personal
},
{
path: '/',
name: 'Login',
component: Login
},
{
path: '/register',
name: 'Register',
component: Register
}
],
mode: "history"
})
以上三个路由path分别对应于登录成功后的跳转页面首页【/personal】,登录页面,注册页面。
项目核心文件【main.js】:实例化vue对象,引入需要使用的工具,如axios,element-ui等
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI)
//全局配置
Vue.prototype.$axios = axios
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
登录界面【Login.vue】:进行了简单的非空校验;通过axios进行http请求,实现向后台提交登录数据,根据后台反馈的status判断信息的正确与否,正确则跳转到首页【/personal】
<template>
<div class="login" clearfix>
<div class="login-wrap">
<el-row type="flex" justify="center">
<el-form ref="loginForm" :model="user" :rules="rules" status-icon label-width="80px">
<h3>登录</h3>
<hr>
<el-form-item prop="username" label="用户名">
<el-input v-model="user.username" placeholder="请输入用户名" prefix-icon></el-input>
</el-form-item>
<el-form-item id="password" prop="password" label="密码">
<el-input v-model="user.password" show-password placeholder="请输入密码"></el-input>
</el-form-item>
<router-link to="/">找回密码</router-link>
<router-link to="/register">注册账号</router-link>
<el-form-item>
<el-button type="primary" icon="el-icon-upload" @click="doLogin()">登 录</el-button>
</el-form-item>
</el-form>
</el-row>
</div>
</div>
</template>
<script>
import axios from "axios";
export default {
name: "login",
data() {
return {
user: {
username: "",
password: ""
}
// rules: {
// username: [{ message: "用户名不能为空", trigger: "blur" }],
// password: [{ message: "密码不能为空", trigger: "blur" }]
// }
};
},
created() {},
methods: {
doLogin() {
if (!this.user.username) {
this.$message.error("请输入用户名!");
return;
} else if (!this.user.password) {
this.$message.error("请输入密码!");
return;
} else {
//校验用户名和密码是否正确;
// this.$router.push({ path: "/personal" });
axios
.post("/login/", {
name: this.user.username,
password: this.user.password
})
.then(res => {
// console.log("输出response.data.status", res.data.status);
if (res.data.status === 200) {
this.$router.push({ path: "/personal" });
} else {
alert("您输入的用户名或密码错误!");
}
});
}
}
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.login {
width: 100%;
height: 740px;
background: url("../assets/images/bg1.png") no-repeat;
background-size: cover;
overflow: hidden;
}
.login-wrap {
background: url("../assets/images/login_bg.png") no-repeat;
background-size: cover;
width: 400px;
height: 300px;
margin: 215px auto;
overflow: hidden;
padding-top: 10px;
line-height: 40px;
}
#password {
margin-bottom: 5px;
}
h3 {
color: #0babeab8;
font-size: 24px;
}
hr {
background-color: #444;
margin: 20px auto;
}
a {
text-decoration: none;
color: #aaa;
font-size: 15px;
}
a:hover {
color: coral;
}
.el-button {
width: 80%;
margin-left: -50px;
}
</style>
注册界面【Register.vue】:注册界面与登录界面大部分类似,直接copy登录界面进行修改即可。实现输入邮箱规则校验,注册成功后跳转到登录界面
<template>
<div class="login clearfix">
<div class="login-wrap">
<el-row type="flex" justify="center">
<el-form ref="loginForm" :model="user" status-icon label-width="80px">
<h3>注册</h3>
<hr>
<el-form-item prop="username" label="用户名">
<el-input v-model="user.username" placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item prop="email" label="邮箱">
<el-input v-model="user.email" placeholder="请输入邮箱"></el-input>
</el-form-item>
<el-form-item prop="password" label="设置密码">
<el-input v-model="user.password" show-password placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon @click="doRegister()">注册账号</el-button>
</el-form-item>
</el-form>
</el-row>
</div>
</div>
</template>
<script>
import axios from "axios";
export default {
name: "login",
data() {
return {
user: {
username: "",
email: "",
password: ""
},
rules: {
username: [{ message: "用户名不能为空", trigger: "blur" }],
email: [{ message: "邮箱不能为空", trigger: "blur" }],
password: [{ message: "密码不能为空", trigger: "blur" }]
}
};
},
created() {
// console.log($);
// console.log("1111");
},
methods: {
doRegister() {
if (!this.user.username) {
this.$message.error("请输入用户名!");
return;
} else if (!this.user.email) {
this.$message.error("请输入邮箱!");
return;
} else if (this.user.email != null) {
var reg = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
if (!reg.test(this.user.email)) {
this.$message.error("请输入有效的邮箱!");
} else if (!this.user.password) {
this.$message.error("请输入密码!");
return;
} else {
// this.$router.push({ path: "/" }); //无需向后台提交数据,方便前台调试
axios
.post("/register/", {
name: this.user.username,
email: this.user.email,
password: this.user.password
})
.then(res => {
// console.log("输出response.data", res.data);
// console.log("输出response.data.status", res.data.status);
if (res.data.status === 200) {
this.$router.push({ path: "/" });
} else {
alert("您输入的用户名已存在!");
}
});
}
}
}
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.login {
width: 100%;
height: 740px;
background: url("../assets/images/bg1.png") no-repeat;
background-size: cover;
overflow: hidden;
}
.login-wrap {
background: url("../assets/images/login_bg.png") no-repeat;
background-size: cover;
width: 400px;
height: 300px;
margin: 215px auto;
overflow: hidden;
padding-top: 10px;
line-height: 20px;
}
h3 {
color: #0babeab8;
font-size: 24px;
}
hr {
background-color: #444;
margin: 20px auto;
}
.el-button {
width: 80%;
margin-left: -50px;
}
</style>
挺简单的,就不分析代码了。