前言
一个好的前端开发项目,都是一个团队负责一个部分进行通力合作的。简单的一个系统网站一般包含登录、主体、各个模块功能这三个大部分,现在我们写的登录界面,我们一般编写这样的登录界面可以说有一定的固定套路。
安装Vue脚手架
1、我们一Windows 10为例子,安装Vue 3脚手架前,我们先要配置node js环境;
2、接下来,安装Vue,安装的过程不多说,大家可以到官网去自行下载就可以了,链接Vue.js;Vue.js - The Progressive JavaScript
或者,可以选择另一种安装方式:
打开控制台,输入一下命令行
npm install vue -g
3、等待安装Vue,还需安装Vue-cli (脚手架),输入如下命令进行安装
npm install -g vue-cli
4、对项目文件进行初始化 还可以使用webpack作为脚手架,命令如下:
vue init webpack qiubite-project
创建登录界面的文件--login.Vue
安装完毕后,这里本人使用的是vscode软件,创建一个登录模块的目录页,
配置路由-- router.js
接下来,我们要把vue的router路由配置给配置好,如下:
import Vue from 'vue' import VueRouter from 'vue-router' import Login from '../components/Login.vue' import Home from '../components/Home.vue' Vue.use(VueRouter) const router = new VueRouter({ routes: [ { path: '/', redirect: '/login' }, { path: '/login', component: Login }, { path: '/home', component: Home, redirect: '/equipment', // 重定向功能,只要访问home地址,就会重定向到wequipment地址 children: [ { path: '/equipment', component: Equip }, { path: '/deploy', component: Deploy }, { path: '/history', component: History }, { path: '/analysis', component: Analysis }, { path: '/power', component: Power }, { path: '/remote', component: Remote }]// welcome为home的子属性 } ], mode: 'history' }) router.beforeEach((to, from, next) => { if (to.path === '/login') return next() const tokenStr = window.sessionStorage.getItem('token') if (!tokenStr) return next('/login') next() }) export default router
这里我们挂载一个路由守卫,router.beforeEach,这里面to将要访问的路径,from 代表从哪一个路径跳到哪一个去beforeEach,next 是一个函数,表示放行,next()放行 next('/login)强制跳转。用户如果访问login,可以直接跳转,获取token。
配置main.js
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' // 导入全局样式表 import './assets/css/global.css' import axios from 'axios' axios.defaults.baseURL = 'http://39.101.161.112:9000' axios.interceptors.request.use(config => { console.log(config) config.headers.Authorization = window.sessionStorage.getItem('token') // 通过axios拦截器添加token验证 return config // 最后必须要return出去 }) Vue.prototype.$http = axios Vue.config.productionTip = false Vue.use(ElementUI) Vue.use(AMap) Vue.use(VideoPlayer) new Vue({ router, store, render: h => h(App) }).$mount('#app')
编写登录界面--Login.Vue
<template> <div class="login_container"> <!-- 登录模块盒子 --> <div class="login-box"> <!-- 图片盒子 --> <div class="avatar_box"> <img src="https://www.atool.online/assets/wo.jpg" alt=""> <h3 class="text">丘 比 特</h3> </div> <!-- 登陆表单区域 --> <el-form label-width="0px" class="login_form" :model="loginForm" :rules="loginFormRules" ref="loginFormRef"> <!-- :model数据绑定对象,绑定到login from这个表单中,rules表单的验证规则对象 --> <!-- 用户登录 --> <el-form-item prop="username"> <el-input prefix-icon="el-icon-user-solid" v-model="loginForm.username" size="mini" ></el-input> <!-- v-model双向绑定,绑定到用户名 --> </el-form-item> <!-- 密码 --> <el-form-item prop="password"> <el-input prefix-icon="el-icon-lock" v-model="loginForm.password" type="password" size="mini" ></el-input> <!-- v-model双向绑定,绑定到用户登录密码,type="password可以使得密码隐藏"--> </el-form-item> <!-- 按钮区域 --> <el-form-item class="btns"> <el-button type="primary" @click="login" size="mini" >登录</el-button> <!-- 为登录绑定一个单击事件,名为login --> <el-button type="info" @click="resetLoginForm" size="mini">取消</el-button> <!-- click绑定单击事件,名为resetloginfrom --> </el-form-item> </el-form> </div> </div> </template> <script> import {Login} from '../network/login' export default { data () { return { loginForm: { username: '', password: '' }, loginFormRules: { username: [ { required: true, message: '请输入登录名称', trigger: 'blur' }, { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入登录密码', trigger: 'blur' }, { min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' } ] } } }, methods: { resetLoginForm () { this.$refs.loginFormRef.resetFields() }, login () { this.$refs.loginFormRef.validate( valid => { if (!valid) {return this.$message.error('用户名密码不正确')} Login(this.loginForm).then( res => { console.log(res); if (res.code !== 0) {return this.$message.error('登录失败')} this.$message.success('登陆成功') window.sessionStorage.setItem('token', res.token) this.$router.push('/home') }).catch( error => { console.log(error); }) }) } } } </script> <style lang="less" scoped> .login_container { background-color: #0e1729; background-image: url(../assets/pic2.png); height: 100%; } .login-box { width: 360px; height: 240px; background-color: #fff; border-radius: 3px; position: absolute; left: 50%; //距离左侧50% top: 50%; // 距离顶部505 transform: translate(-50%, -50%); //横轴上移动50%,纵移动50% } .avatar_box { height: 100px; width: 100px; border: 1px solid #eee; border-radius: 50%; padding: 10px; box-shadow: 0 0 10px #eee; position: absolute; left: 50%; top:-40%; transform: translate(-50%); background-color: rgb(32, 181, 201); img { width: 100%; height: 100%; border-radius: 50%; background-color: #eee; } } .login_form { position: absolute; bottom: 0; width: 100%; padding: 0 20px; box-sizing: border-box; } .btns { display: flex; justify-content: flex-end; } .text { text-align: center; margin-top: 10px; font-size: 20px; font-family: 宋体; } </style>
1、 validate回调函数,完成登录表单前的预校验;
2、将登陆成功以后的token,保存到客户端的sessionstorage中;
3、项目中除了登陆之外的其他api接口,必须将token保存到客户端;
4、 this.$router.push('/home)是通过编程式导航跳转到后台,路由地址为/home。
结果展示
总结
用户登录首先完成账号密码输入,当用户进行账户密码登录操作,系统将验对账户密码进行查询、登录表单数据绑定验证。当用户登录成功时,用户信息将会被记录到session中,用户信息将会被记录到系统日志中,再通过重定向即可跳转到系统首页。当用户登录失败时,系统弹出“登陆失败,请重新登录”提示信息。当用户登录账户密码不合法时,系统将弹出“登录信息不合法”提示信息,用户需进行账户密码重置重新登陆。如下是用户登录界面的时序图:
到此这篇关于VUE脚手架框架编写简洁的登录界面的实现的文章就介绍到这了,更多相关VUE 登录界面内容请搜索阿兔在线工具以前的文章或继续浏览下面的相关文章希望大家以后多多支持阿兔在线工具!