前提:

(1) 相关博文地址:

SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p/12930895.html

(2)代码地址:

https://github.com/lyh-man/admin-vue-template.git

一、定义公共组件页面

简单的页面效果如下所示:(做的比较粗糙,大致理解页面即可)

1、安装 element-ui

(1)简介

一款 ui 框架。使用 element-ui 用于实现页面的绘制。

【官网:】

https://element.eleme.cn/#/zh-CN

【文档:】

https://element.eleme.cn/#/zh-CN/component/installation

(2)安装

可以通过 npm 或者 cdn 方式使用,此处使用 npm 方式安装。

【安装方式一:(npm 安装)】

npm install element-ui

【安装方式二:(CDN 方式引入)】

(3)引入 element-ui

在 main.js 中引入(也可以自定义一个 js,然后在 main.js 中引入自定义的 js)。

//引入 element-ui

import ElementUI from 'element-ui'

//引入 element-ui 的 css 文件

import 'element-ui/lib/theme-chalk/index.css';//声明使用 element-ui

Vue.use(ElementUI);

2、修改 App.vue

(1)简介

页面主入口。

通过 router 将组件 显示在 router-view 标签处。(基本路由规则到本文末尾可以看)

(2)修改页面内容

font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;

text-align: center;

color: #2c3e50;

}/*解决子组件中 height: 100% 不生效问题*/html,body,#app{

height:100%;

margin:0;

padding:0;

overflow: hidden;

}

3、404.vue

(1)简介

定义错误页面。

当错误发生时,用于跳转到 404 页面。

(2)定义页面内容

404

抱歉!您访问的页面失联啦 ...

返回上一页

进入首页

position: absolute;

top:0;

right:0;

bottom:0;

left:0;

overflow: hidden;

}

.not-found-title {

margin: 20px015px;

font-size: 10em;

font-weight: 400;

color: rgb(55, 71, 79);

}

.not-found-desc {

margin:0 030px;

font-size: 26px;

color: rgb(118, 131, 143);

}

.not-found-desc>em {

font-style: normal;

color: #ee8145;

}

.not-found-btn-gohome {

margin-left: 30px;

}

(3)页面显示如下:

4、Login.vue

(1)简介

定义登陆页面。

访问系统时,用于跳转到登录界面。

背景图(来源于网络):

(2)定义页面内容:

管理员登录

登录

data() {return{

dataForm: {

userName:'',

password:''},

dataRule: {

userName: [{

required:true,

message:'帐号不能为空',

trigger:'blur'}],

password: [{

required:true,

message:'密码不能为空',

trigger:'blur'}]

}

}

},

methods: {//提交表单

dataFormSubmit() {//TODO:登录代码逻辑待完善

alert("登录代码逻辑未完善")this.$router.replace({name: 'Home'})

}

}

}

position: absolute;

top:0;

right:0;

bottom:0;

left:0;

overflow: hidden;

background-color: rgba(38, 50, 56, .6);

background: url(~@/assets/login_bg.jpg) no-repeat;

background-size: 100% 100%;

}

.login-content {

position: absolute;

top:0;

right:0;

bottom:0;

left:0;

margin: auto;

height: 300px;

width: 400px;

background-color: #112234;

opacity: .8;

}

.login-main {

color: beige;

padding: 20px 20px 10px 20px;

}

(3)页面显示如下:

二、定义主页面

主页面 可以拆分成多个组件,每个组件负责一部分页面的显示。

拆分成 Header、Aside、Content 三个页面。

其中:

Header          用于定义导航栏信息

Aside             用于定义菜单栏信息

Content         用于显示各个菜单选项的页面

1、Home.vue

(1)简介

定义主界面。

通过 Login 登录系统后,需要跳转到 主页面。

(2)定义页面内容

name:'Home',

components: {

Header,

Aside,

Content

},

data() {return{

foldAside:true}

},

methods: {

foldOrOpen(data) {this.foldAside =data

}

}

}

height:100%;

}

(3)页面显示如下:

2、Header.vue

(1)简介

用于定义主页面的导航栏。

通过导航栏,可以进行一些操作。比如:折叠侧边栏、修改密码、退出登录等。

(2)定义页面内容

设置

帮助

博客地址

代码地址

{{ userName }}

修改密码

退出

name:'Header',

data() {return{//是否展开侧边栏

foldAside: true,//默认用户名

userName: 'admin',//是否展开密码框

UpdatePasswordVisible: false}

},

components: {//引入密码框组件

UpdatePassword

},

methods: {//展开密码修改框

showPasswordBox() {this.UpdatePasswordVisible = true

//this.$nextTick 表示数据渲染后,执行密码框初始化

this.$nextTick(() =>{this.$refs.updatePassowrd.init()

})

},//展开、折叠侧边栏

foldOrOpen() {this.foldAside = !this.foldAside//this.$emit 用于触发父组件的方法,并传递参数值

this.$emit("foldOrOpenAside", this.foldAside)

},//退出登录,回到登录界面

logout() {//TODO:退出逻辑待完成

alert("退出逻辑未完成");this.$router.push({

name:"Login"})

}

}

}

padding:010px;

display: flex;

height: 50px;

line-height: 50px;

}

.header-title {

height: 50px;

width: 50px;float: left;

font-size: 50px;

cursor: pointer;

}

.header-menu {

height: 50px;

width:100%;

flex:1;

line-height: 50px;

font-size: 30px;

}

.header-menu-submenu {float: right;

}

.header-submenu-a {

text-decoration: none;

color: #4CC4B8;

font-weight: bold;

font-size: 16px;

}

.header-submenu-a:hover {

background-color: #2C3E50;

}

.el-menu--horizontal>.el-menu-item,

.el-menu--horizontal>.el-submenu .el-submenu__title {

height: 50px!important;

line-height: 50px !important;

}

.el-menu--collapse .el-menu .el-submenu, .el-menu--popup {

min-width: auto !important;

}

.header-span img {

width: 40px;

height: 40px;

line-height: 40px;

margin: 5px 10px 10px 10px;

}

.header-span {

font-size: 20px;

}

(3)页面显示如下

3、UpdatePassword.vue

(1)简介

定义密码修改框,用于修改用户密码。

(2)定义页面内容

{{ userName }}

取消

确定

data() {return{

userName:'admin',

visible:false,

dataForm: {

password:'',

newPassword:'',

confirmPassword:''},

dataRule: {

password: [{

required:true,

message:'原密码不能为空',

trigger:'blur'}],

newPassword: [{

required:true,

message:'新密码不能为空',

trigger:'blur'}],

confirmPassword: [{

required:true,

message:'确认密码不能为空',

trigger:'blur'}]

}

}

},

methods: {//初始化

init() {this.visible = true

//初始化清空表单内容

this.$nextTick(() =>{this.$refs['dataForm'].resetFields()

})

},//表单提交,回到登录界面

dataFormSubmit() {//TODO: 表达提交逻辑待完成

alert("表达提交逻辑未完成")this.visible = false;this.$nextTick(() =>{this.$router.push({

name:"Login"})

})

}

}

}

(3)页面显示如下

4、this.$nextTick 与 this.$emit 简单介绍

(1)this.$nextTick

其用于数据渲染之后执行。

比如:

修改了某个数据,这个数据需要 dom 更新之后才会显示出来,此时就可以使用 this.$nextTick。其传递一个回调函数,在数据渲染之后执行。

在 Header.vue 中,就使用到了这个。如下所示:

密码修改框通过 UpdatePasswordVisible 来控制是否显示。

showPasswordBox() 方法被执行时,UpdatePassword 组件开始加载,数据渲染完成后触发 this.$nextTick 的回调函数,进行密码框的初始化。

//展开密码修改框

showPasswordBox() {this.UpdatePasswordVisible = true

//this.$nextTick 表示数据渲染后,执行密码框初始化

this.$nextTick(() =>{this.$refs.updatePassowrd.init()

})

},

若立即使用 this.$refs.updatePassowrd.init() 调用 UpdatePassword 的 init 方法,会报错,因为此时的 UpdatePassword  数据还未渲染,若想成功执行,需要使用 this.$nextTick,表示在数据渲染成功后执行。

//展开密码修改框

showPasswordBox() {this.UpdatePasswordVisible = true

this.$refs.updatePassowrd.init()

},

(2)this.$emit

用于子组件向父组件传递数据,并触发父组件的方法。

在Home.vue 与 Header.vue 中,就使用到了这个。如下所示:

在 Home 组件里引入了 Header 组件,并定义了 @foldOrOpenAside 方法,

在 Header 组件里通过 this.$emit 调用 foldOrOpenAside 方法,并传递数据(可选)。

【Home.vue】

foldOrOpen(data) {this.foldAside =data

}

【Header.vue】

//展开、折叠侧边栏

foldOrOpen() {this.foldAside = !this.foldAside//this.$emit 用于触发父组件的方法,并传递参数值

this.$emit("foldOrOpenAside", this.foldAside)

},

5、Aside.vue

(1)简介

用于定义侧边栏,显示菜单。

(2)定义页面内容

后台管理中心

后台

首页

demo

echarts

ueditor

name:'Aside',

props: ['foldAside'],

data() {return{//保存当前选中的菜单

menuActiveName: 'home',//保存当前侧边栏的宽度

asideWidth: '200px',//用于拼接当前图标的 class 样式

iconSize: 'true'}

},

watch: {//监视是否折叠侧边栏,折叠则宽度为 64px。

foldAside(val) {this.asideWidth = val ? '200px' : '64px'

this.iconSize =val

}

}

}

margin-bottom: 0;

height:100%;

max-height: calc(100% -50px);

width:100%;

max-width: 200px;

background-color: #263238;

text-align: left;

right:0;

}

.header-logo {

background-color: #17b3a3;

text-align: center;

height: 50px;

line-height: 50px;

width: 200px;

font-size: 24px;

color: #fff;

font-weight: bold;

margin-bottom: 0;

cursor: pointer;

}

.el-submenu .el-menu-item {

max-width: 200px !important;

}

.el-scrollbar__wrap {

overflow-x: hidden !important;

}

.icon-size-falsei {

font-size: 30px !important;

}

.icon-size-truei {

font-size: 18px !important;

}

(3)页面显示如下

6、props 简单介绍

其用于父组件向子组件传递数据。

在 Home.vue 和 Aside.vue 中,就使用到了这个。如下所示:

在 Home.vue 中引入 Aside.vue 组件,并定义了 :foldAside 属性。

在 Aside.vue 组件中,使用 props 可以获取到 这个 属性。

【Home.vue】

【Aside.vue】

props: ['foldAside'],

7、Content.vue

(1)简介

用于定义各个菜单点击后的页面显示。

同样需要使用 router 进行页面跳转(嵌套路由,通过 children 中的规则定义跳转路径),基本路由规则本文最后有介绍。

(2)定义页面内容

name:'Content'}

background-color: #f1f4f5;

}

.card {

height:100%;

}

(3)页面显示如下

8、定义 content 显示页面(仅供测试)

【Ueditor.vue】

Ueditor

【HomePage.vue】

HomePage

【Echarts.vue】

Echarts

点击 Aside 中各个菜单,在 Content 会显示不同的 页面。

9、基本路由问题

(1)简介

想要各个组件页面间能够顺利跳转,就需要 router 来操作了。

此处简单写了路由跳转规则,后续会进行修改。

(2)定义路由跳转规则

path 指的是 路径。

redirect 指的是 需要跳转的路径。

name 指的是 路由的名字(此项目中,均使用 name 进行路由跳转)。

component 指的是 路由的组件,用于显示页面( 会加载组件)。

children 指的是 子路由(路由中显示另一个路由)。

import Vue from 'vue'import VueRouter from'vue-router'import Home from'../views/Home.vue'Vue.use(VueRouter)

const routes=[{

path:'/',

redirect: {

name:"Login"}

},

{

path:'/404',

name:'404',

component: ()=> import('@/components/common/404.vue')

},

{

path:'/Login',

name:'Login',

component: ()=> import('@/components/common/Login.vue')

},

{

path:'/Home',

name:'Home',

component: ()=> import('@/views/Home.vue'),

redirect: {

name:'HomePage'},

children: [{

path:'/Home/Page',

name:'HomePage',

component: ()=> import('@/views/menu/HomePage.vue')

},

{

path:'/Home/Demo/Echarts',

name:'Echarts',

component: ()=> import('@/views/menu/Echarts.vue')

},

{

path:'/Home/Demo/Ueditor',

name:'Ueditor',

component: ()=> import('@/views/menu/Ueditor.vue')

}

]

},

]

const router= newVueRouter({//routes 用于定义 路由跳转 规则

routes,//mode 用于去除地址中的 #

mode: 'history',//scrollBehavior 用于定义路由切换时,页面滚动。

scrollBehavior: () =>({

y:0})

})//解决相同路径跳转报错

const routerPush =VueRouter.prototype.push;

VueRouter.prototype.push= functionpush(location, onResolve, onReject) {if (onResolve ||onReject)return routerPush.call(this, location, onResolve, onReject)return routerPush.call(this, location).catch(error =>error)

};

exportdefault router

element ui 前台模板_SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(二):引入 element-ui 定义基本页面显示...相关推荐

  1. vue+element-ui JYAdmin后台管理系统模板-集成方案【项目搭建篇1】

    项目搭建时间:2020-06-29 本章节:讲述基于vue/cli, 项目的基础搭建. 本主题讲述了vue+element-ui JYAdmin 后台管理系统模板-集成方案,从零到一的手写搭建全过程. ...

  2. Vue学习笔记: Vue + Element-ui搭建后台管理系统模板

    Vue学习笔记: Vue + Element-ui搭建后台管理系统模板 技术:Vue + Element-ui 功能:后台管理系统基础模板,路由配置,加载页面进度条,请求响应拦截器的封装等 页面预览: ...

  3. Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境 配置环境

    项目介绍 使用 vue 以及 element-ui 搭建一个 后台管理系统的模板. 纯属练手(写的比较糙 望指点) 基本环境搭建 初始化项目 使用 vue 以及 element-ui 搭建一个 后台管 ...

  4. Vue + ElementUI 实现后台管理系统模板 -- 前端篇(四):定义主页面

    一.定义主页面 主页面 可以拆分成多个组件,每个组件负责一部分页面的显示. 拆分成 Header.Aside.Footer.Content 四个页面. 其中: Header          用于定义 ...

  5. SpringBoot+Vue+ElementUI实现后台管理系统

    前言 今天学习了如何搭建一个后台管理系统,因此打算记录并总结一下今天的学习内容. 该项目是一个非常好用的后台管理系统模板,代码比较简单,项目功能比较通用,总之就是很推荐初学者学习. 项目的大体项目框架 ...

  6. vue+ElementUI实现后台管理系统(二)

    一.项目地址 项目链接 Getting started # clone the project git clone https://github.com/PanJiaChen/vue-element- ...

  7. Vue + Element-ui实现后台管理系统---项目搭建 + ⾸⻚布局实现

    目录:导读 项目搭建 + ⾸⻚布局实现 一.项目搭建 1.环境搭建 2.项目初期搭建 二.Main.vue 三.左侧栏部分(CommonAside.vue) 四.header部分(CommonHead ...

  8. Vue 项目应用 —— 后台管理系统模板

    登陆页效果预览 目前只实现了简单的登录和客户档案的添加和显示功能,后面会进一步更新功能. 用户名:dk 密码:123 源码:https://github.com/dk-lan/vue... 项目说明 ...

  9. 基于Vue+ElementUI的后台管理系统开发的总结

    第一步:工具的介绍 工欲善其事必先利其器,所以首先先总结一下这个项目中的使用到的工具,主要是对自己不熟悉也是第一次接触的一些东西的总结,这些工具大概分成3类:项目管理工具.项目打包工具.项目运行依赖 ...

最新文章

  1. 史上最全SQL优化方案(二)
  2. POJ 1190 生日蛋糕 【DFS + 极限剪枝】
  3. Windows下MongoDB安装及创建用户名和密码
  4. oracle中join另一个表后会查询不出一些数据_阿里规定超过3张表,禁止JOIN,为何?
  5. JVM系列之:从汇编角度分析Volatile
  6. 银行家舍入VS四舍五入(下):.NET发现之旅(四)
  7. C#黔驴技巧之实现统计结果排名
  8. POJ1315 UVA639 UVALive5325 Don't Get Rooked题解
  9. 佳博标签打印机如何打印条码流水号
  10. 基于Java的企业内部通信系统的设计与实现
  11. C语言程序——输入三角形的边长求面积
  12. Linux(Ubuntu)中对音频批量转换格式MP3转WAV/PCM转WAV
  13. write和read返回值详解
  14. python面向对象编程指南([美stevenflott_Python面向对象编程指南 ([美]StevenFLott洛特) 中文_IT教程网...
  15. MacOS 搭建一个vue项目(完整步骤)
  16. PS把图片变透明做logo
  17. python浓缩(13)面向对象编程
  18. 手机也能拍出艺术品?大师镜头,“真”突破了不少
  19. 基于web的健身俱乐部网站系统的设计与实现
  20. 你该有一个属于自己的个人博客了

热门文章

  1. 人工神经网络之激活函数 -RELU函数
  2. Hive 基础(1):分区、桶、Sort Merge Bucket Join
  3. Linux下切换用户出现su: Authentication failure的解决办法
  4. UriComponentsBuilder和UriComponents url编码
  5. apkTool反编译apk碰到的问题
  6. 获取Spring中的bean,使得线程安全性得到保障
  7. 从EXCEL文件将数据导入数据库的向导程序设计!
  8. 别为iptables日志付出太多-一种Linux防火墙优化方法
  9. 属性总结(四):linestyle
  10. 关于 angularjs 的小结