我是跟着B栈上面一个老师学的,因为我也自己想学习的方向是后端嘛,想对前端有个更多的了解,然后就跟着再做一个项目,视频地址
git上拉取本项目:https://gitee.com/zgg/sprotplay.git
总体的过程呢就是如下的
好啦到这里我们就OK了,解析来正式的开发我们的登录页面
https://element.eleme.cn/#/zh-CN/component/form
当我引入样式的时候,页面报错了
原因是lessLoader版本过高导致的,降低版本就OK了:降低到7npm install [email protected] --save-dev
,如果还是不行,那就:npm install [email protected]
<template>
<div class='login_container'>
<!-- 登录快 -->
<div class="login_box">
<!-- 头像div -->
<div class="avatar_box">
<img src="../assets/logo.png" alt>
</div>
<!-- 表单区域 -->
<el-form ref="loginFormRef" :model="loginForm" class="login_form" label-width="80px">
<!-- 用户名 -->
<el-form-item label="活动名称">
<el-input v-model="loginForm.username" prefix-icon="el-icon-search"></el-input>
</el-form-item>
<!-- 密码 -->
<el-form-item label="活动名称">
<el-input v-model="loginForm.password" prefix-icon="el-icon-search"></el-input>
</el-form-item>
<!--按钮-->
<el-form-item class="btns">
<el-button type="primary" >提交</el-button>
<el-button type="success" >重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
export default {
//对数据进行绑定
data() {
return {
loginForm:{
username:"username",
password:"password"
}
}
}
}
</script>
<style lang="less" scoped>
.login_container{
background-color:#2b4b6b;
height:100%;
}
.login_box {
width: 450px;
height: 300px;
background-color: #fff;
border-radius: 3px;// 圆角
position: absolute;// 绝对定位
left: 50%;
top: 50%;
transform: translate(-50%, -50%);// 根据自己位置 以自己为长度位移
// 头像框
.avatar_box {
width: 130px;
height: 130px;
border: 1px solid #eee;
border-radius: 50%; // 加圆角
padding: 10px;
box-shadow: 0 0 10px #ddd;// 盒子阴影
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
background-color: #0ee;
img {
width: 100%;
height: 100%;
border-radius: 50%; // 加圆角
background-color: #eee;
}
}
.btns {
display: flex;// 弹性布局
justify-content: flex-end; // 尾部对齐
}
.login_form {
position: absolute;
bottom: 0%;
width: 100%;
padding: 0 10px;
box-sizing: border-box;// 设置边框
}
}
</style>
我们的用户名和密码是仅仅是个样式而已,并没有能进行效验的能力,所以现在要进行开发,有效验的规则。
我们在点击登录或者重置按钮上面反应都没有,开发了什么哦,要想有反应就得必须axios登场了。
比如再演示
原因是我们的await【这个await关键字就是要对我们返回来的数据进行解析】关键字必须配合async关键字一起使用
虽然咱Element ui这个组件官网上面都有,但是咱还是理解一下好一点。
axios.defaults.baseURL = "http://localhost:8083"
,而后端则要在application.yaml或者application.properties里面配置端口号,然后前端的请求就可以通过,如这样的$http.post("test")
请求对后端要数据$router.push({path:"/home"});
经过上面的讲解,我们已经知道后端返回给咱们的是啥了,咱们可以拿到这个,如何现在可以做相应的处理了。
假设如下是咱们的登录路径test,然后返回给前端一个字符串类型,是不行的,所以咱们得思考,用Http常用的编码,200表示成功,404表示错误什么的,现在这样思考。其实在我们后端开发人员看来这个是很好处理的,就应该返回一个JSON格式的对象,给前端。所以安排如下
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
为什么能展示就是因为我们有了await关键字给我解析了
各位有什么不懂的,可以私信我。
既然后端把user的信息反给我们了,那我就做一个保存,然后那样的话,在后面的什么主页面上都有很多操作。
它相当于在全局就有了我们的这个user的数据了
为什么有window.router.clear()方法,那是因为我要是下登录的话,那我们浏览器的cookie也要消除。
<el-container>
<el-header>Header</el-header>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-main>Main</el-main>
</el-container>
</el-container>
<template>
<!-- 引入container布局 -->
<el-container>
<!-- 头部 -->
<el-header>
<el-button type="info" @click="logout()">退出登录</el-button>
</el-header>
<!-- 主体 -->
<el-container>
<!-- 侧边栏 -->
<el-aside width="200px">Aside</el-aside>
<!-- 主体内容 -->
<el-main>Main</el-main>
</el-container>
</el-container>
</template>
<template>
<!-- 引入container布局 -->
<el-container class="home-container">
<!-- 头部 -->
<el-header>
<el-button type="info" @click="logout()">退出登录</el-button>
</el-header>
<!-- 主体 -->
<el-container>
<!-- 侧边栏 -->
<el-aside width="200px">Aside</el-aside>
<!-- 主体内容 -->
<el-main>Main</el-main>
</el-container>
</el-container>
</template>
<script>
export default {
methods: {
logout(){
window.sessionStorage.clear();
this.$router.push({path:"/login"});
}
}
}
</script>
<style scoped>
.el-header {
background-color: #373d41;
display: flex;
justify-content: space-between; /**左右贴边 */
padding-left: 0%; /*左边界 */
color: #fff;
font-size: 20px;
>div{
isplay: flex;
align-items: center;
span{
margin-left: 15px;
}
}
}
.el-aside {
background-color: #333744;
.el-menu{
border-right: none;/*// 对其右边框 */
}
}
.el-main {
background-color: #eaedf1;
}
.home-container {
height: 100%;
}
.logo_img {
width: 20%;
height: 100%;
}
.iconfont{
margin-right: 10px;
}
.toggle-button{
background-color:#4A5064;
font-size: 10px;
line-height: 24px;
color:#fff;
text-align: center;
letter-spacing: 0.2em;
cursor: pointer;/* 显示鼠标指针为:小手 */
}
</style>
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>导航一</span>
</template>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="1-1">选项1</el-menu-item>
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="1-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-4">
<template slot="title">选项4</template>
<el-menu-item index="1-4-1">选项1</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="2">
<i class="el-icon-menu"></i>
<span slot="title">导航二</span>
</el-menu-item>
<el-menu-item index="3" disabled>
<i class="el-icon-document"></i>
<span slot="title">导航三</span>
</el-menu-item>
<el-menu-item index="4">
<i class="el-icon-setting"></i>
<span slot="title">导航四</span>
</el-menu-item>
</el-menu>
本项目呢不要那么层侧边栏,所以我只要二级目路的话,就可以如下
由于项目中的这些分组和导航栏部分的内容,不会手动的去写,而是从数据库里面进行查询出来的结果,然后进行展示给用户观看,所以咱们现在去开发去我们的数据库展示的方法去
接下俩去后端找侧边栏的数据进行展示了
select mainmenu.*,submenu.id as sid,submenu.title as stitle,submenu.path as spath
from mainmenu ,submenu
where mainmenu.id = submenu.mid;
由于我们前端展示出来这样肯定不行的,所以我们必须进行一对多的关系映射进行展示
进行循环遍历展示
这个item不是随便写的,而是和我们数据库里面一一对应了的
同样的这个item.slist也不是随便写的,而是我们在查询中的XXXMapper.xml文件里面写的
这个时候我们发现我们一点权限管理,下面的运动平台一样的跟着展示给我们看了,再次进行修改
为什么是xx加上‘’呢?因为我这里要求是字符串类型
只要我们的collapse属性为false的时候,它就是显示为缩进去了
显然上面的属性不能手动的去绑定,而应该是动态的进行绑定。
这个main页面是什么都没有有的,而应该是我们点击了那个页面后,然后跳转到对应的页面去的,而这个一个面应该又是咱们一个个的新的XXX.vue文件,获得文件然后就进行展示。
但是我们总有个默认的吧,不可能进行就展示一个空白页面给用户,所以咱们来进行开发。
因为我这时候的重定向,应该定位到我们页面的子组件上面去,所以就要这样子路径上面去了
这个user路径是我们的路由哦,不是什么随便写的。
不管怎么刷新都是保存在user这个页面了,但是我们肯定是要动态的进行处理,而不是这样死板的的设置。
我们要进行动态的绑定,肯定又要定义一个属性data的返回值了
首先看一下我的思路,我每一张表格上肯定都要写一个导航栏,可以回到首页,还有权限管理,还有运动平台的导航。这个效果就要交给面包屑来处理
添加样式【这样式要在全局编写】
后面个important的原因是为了提高优先级
首先我想要在我们加载页面就会获取我们的用户数据,所以肯定要在created里面添加东西。
正常情况下我们在下面都是能够有分页的功能,下一页,和上一页,然后定位到某一页的情况,所以这里来大概实现这一个功能。
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-sizes="[100, 200, 300, 400]"
:page-size="100"
layout="total, sizes, prev, pager, next, jumper"
:total="400">
</el-pagination>
size-change:每页最大的一个数量
current-change:当前页面变化数
梳理一下过程
这个就算你是点击了,然后你重新刷新,后天没有被修改,所以是没有完成的功能,这里就来修改一下。