框架布局

本章只介绍基础布局,和一些主要的js,页面上基本上都是些交互事件,项目代码上都有注释,不懂的地方debug跑一变就知道了,只是这些事件基本上没有独立存在的,相互之间都有关联

框架风格

新建页面:/src/views/layout/layout.vue

<!-- layout.vue -->
<template><div id="loyout"><el-container><layoutAside></layoutAside><el-container><layoutHeader></layoutHeader><el-main id="elmain"><transition name="main" mode="out-in"><router-view></router-view></transition></el-main><el-footer><Bottom></Bottom></el-footer></el-container></el-container></div>
</template>
复制代码

aside 无限级菜单组件

新建页面:/src/views/layout/aside/aside.vue

<!-- aside.vue -->
<template><div><el-aside id="asideNav"><div class="logo-name"><p v-if="$store.getters.logoShow">XU</p><p v-else>vue-xuAdmin后台模板</p></div><!-- el-menu的属性查看官方文档 --><el-menu :default-active="$route.path" class="el-menu-vertical"@select="selectmenu":collapse="$store.getters.isCollapse"background-color="#03152A"text-color="rgba(255,255,255,.7)"active-text-color="#ffffff":router="$store.getters.uniquerouter":unique-opened="$store.getters.uniquerouter":collapse-transition="true"><!-- 遍历根据权限生成的路由表生成菜单列表 --><template v-for="(item,index) in $store.getters.routers" v-if="!item.hidden"><!-- 检查是否带有alone属性的一级菜单类似“主页”,还有子菜单的个数 --><el-submenu v-if="!item.alone && item.children.length>0" :index="index+''"><template slot="title"><!-- 如果没有设置图标将会采用默认图标‘fa fa-server’ --><i :class="item.iconCls?item.iconCls:[fa,fa-server]"></i><span slot="title">{{ $t(`routeNmae.${item.name}`) }}</span></template><!-- 子菜单组件 --><menu-tree :menuData="item.children"></menu-tree></el-submenu><!-- 一级菜单 --><el-menu-item :index="item.path" v-else><i :class="item.iconCls?item.iconCls:[fa,fa-file]"></i><span slot="title">{{ $t(`routeNmae.${item.name}`) }}</span></el-menu-item></template></el-menu></el-aside></div>
</template>
复制代码

点击菜单

// aside.vue
watch: {// 监听浏览器直接输入路由,将此路由添加到tabnavBox'$route.path': function (val) {this.selectmenu(val)}},// 点击菜单把当前菜单的name和path添加到tabNavBox容器,生成tabNav标签页菜单
selectmenu (key) {// 获取当前权限路由表let router = this.$store.getters.routerslet name = ''// 查找路由的name属性let navTitle = function (path, routerARR) {for (let i = 0; i < routerARR.length; i++) {if (routerARR[i].children.length > 0 || routerARR[i].path === path) {if (routerARR[i].path === path && routerARR[i].children.length < 1) {name = routerARR[i].namebreak}// 递归查找navTitle(path, routerARR[i].children)}}return name}// tabNavBox添加数据this.$store.dispatch('addTab', {title: navTitle(key, router),path: key})}
复制代码

子菜单组件 menu-true

新建页面:/src/views/layout/aside/menuTree.vue

<!-- menuTree.vue -->
<template><div><template v-for="(child,index) in menuData"><el-submenu v-if="child.children.length > 0" :index="child.path"><template slot="title"><i :class="child.iconCls?child.iconCls:[fa,fa-file]"></i><span slot="title">{{ $t(`routeNmae.${child.name}`) }}</span></template><!-- 通过递归 menu-tree 生成无限级菜单 --><menu-tree :menuData="child.children"></menu-tree></el-submenu><el-menu-item v-else :index="child.path"><i :class="child.iconCls?child.iconCls:[fa,fa-file]"></i><span slot="title">{{ $t(`routeNmae.${child.name}`) }}</span></el-menu-item></template></div>
</template>
复制代码

header头部

这里没啥好说的,都是html布局,tabnav接下来说, i18n后面会讲

新建页面:/src/views/layout/header/header.vue

<!-- header.vue -->
<template><div><el-header id="header"><span class="hideAside" @click="collapse"><i class="fa fa-indent fa-lg"></i></span><ul class="personal"><li class="fullScreen" @click="fullScreen"><el-tooltip class="item" effect="dark" content="全屏" placement="bottom"><iclass="fa fa-arrows-alt fa-lg"></i></el-tooltip></li><li><langSelect></langSelect></li><li>{{ $t(`role.${this.$store.getters.info.role}`) }}</li><li><el-dropdown @command="handleCommand"><span class="el-dropdown-link">夏洛克丶旭<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item command="a">{{ $t('userDropdownMenu.basicInfor') }}</el-dropdown-item><el-dropdown-item command="b">{{ $t('userDropdownMenu.changePassword') }}</el-dropdown-item><el-dropdown-item command="logout" divided>{{ $t('userDropdownMenu.logout') }}</el-dropdown-item></el-dropdown-menu></el-dropdown></li><li class="icon"><img :src="avatar"/></li></ul></el-header><!-- tabNav 组件,标签页菜单 --><tabNav></tabNav></div>
</template>
复制代码

tabNav 组件

这里的tabNav标签动画和页面的动画是一样的,都是官方的demo稍微改一下,,只不过页面有mode="out-in"所以动画时间需要快一点

新建页面:/src/views/layout/header/tabNav.vue

<!-- tabNav.vue -->
<template><div><div class="tabnavBox"><transition-group name="list" tag="ul"><!-- tabnavBox 是存储所有tabNav的数据容器,每次点击左侧菜单就会把数据添加到tabnavBox --><li v-for="(item, index) in $store.getters.tabnavBox" @contextmenu.prevent="openMenu(item,$event,index)":key="item.title" class="tabnav" :class="{ active: $route.path === item.path }"><router-link :to="item.path">{{ $t(`routeNmae.${item.title}`) }}</router-link><i @click="removeTab(item)" class="el-icon-error" v-if="index !== 0"></i></li></transition-group></div><!-- 右击菜单 --><ul v-show="this.rightMenuShow" :style="{left:this.left+'px',top:this.top+'px'}" class="menuBox"><li @click="removeTab($store.getters.rightNav)"><i class="fa fa-remove"></i>{{ $t('rightMenu.close') }}</li><li @click="removeOtherTab($store.getters.rightNav)">{{ $t('rightMenu.closeOther') }}</li><li @click="removeAllTab">{{ $t('rightMenu.closeAll') }}</li></ul></div>
</template>
复制代码

系列文章

Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述

Vue2.0 + ElementUI 手写权限管理系统后台模板(二)——权限管理

Vue2.0 + ElementUI 手写权限管理系统后台模板(三)——页面搭建

Vue2.0 + ElementUI 手写权限管理系统后台模板(四)——组件结尾

转载于:https://juejin.im/post/5c156ae16fb9a049e660250c

Vue2.0 + ElementUI 手写权限管理系统后台模板(三)——页面搭建相关推荐

  1. Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述

    简介 这个权限管理就是为了方便,跟系统安全真的不沾边,只是根据后台返回的角色信息来生成他可以看见的菜单和按钮,显示菜单的方法是根据权限删除掉路由表里没有权限的路由,然后再动态添加,原本包含没有访问权限 ...

  2. 一个connection对象可以创建一个或一个以上的statement对象_从 0 开始手写一个 Mybatis 框架,三步搞定...

    来自:开源中国,作者:我叫刘半仙 链接:https://my.oschina.net/liughDevelop/blog/1631006 MyBatis框架的核心功能其实不难,无非就是动态代理和jdb ...

  3. 从 0 开始手写一个 Mybatis 框架,三步搞定!

    最近研究了一下Mybatis,给大家磕叨磕叨,MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码.本文完成的Mybatis功能比较简 ...

  4. 基于vue2.0 + elementUI 后台管理平台

    Vue-Admin-Demo 这是一个基于vue2.0 + elementUI 后台管理平台 Github: https://github.com/xiahuahua/vue-vux-demo(欢迎S ...

  5. Vue2.0+ElementUI+PageHelper实现的表格分页

    Vue2.0+ElementUI+PageHelper实现的表格分页 前言 最近做了一些前端的项目,要对表格进行一些分页显示.表格分页的方法有很多,从宏观上来说分为物理分页和逻辑分页,由于逻辑分页(即 ...

  6. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  7. 学生就业管理系统后台模板

    简介: 学生就业管理系统后台模板,DIV+CSS布局,全套模板,包括登录.个人信息.家庭信息.学校信息.学籍信息.处分信息.档案信息.就业信息.就业调查.考研信息.修改密码等HTML后台模板页面. 网 ...

  8. vue3.0+ts+element-plus多页签应用模板:项目搭建

    目录 系列文章 一.安装vue-cli@4.5.x 二.创建项目 三.项目配置 四.IDE配置 五.vue.config.js配置 六.重置浏览器默认样式 系列文章 vue3.0+ts+element ...

  9. Python全栈(八)Flask项目实战之10.前台发布帖子和后台帖子管理页面搭建

    文章目录 一.前台板块页面搭建 二.发布帖子页面搭建 三.前台帖子模型创建 四.文章的发布 1.基本实现 2.项目优化 (1)功能优化--Markdown编辑上传上传本地图片 (2)代码优化--抽离A ...

最新文章

  1. 在NVIDIA Jetson Xavier NX上安装llvmlite报错:No such file or directory: ‘llvm-config‘: ‘llvm-config‘
  2. SpringBoot中通过重写WebMvcConfigurer的方法配置静态资源映射实现图片上传后返回网络Url
  3. Cpp / std::move 原理
  4. Hive Shell 常用命令
  5. 【渝粤题库】国家开放大学2021春1283社会保障学(本)题目
  6. 信息学奥赛一本通 2017:【例4.2】输出偶数
  7. APT/APT-GET常用信息
  8. SCVMM2008测试手册
  9. iOS 使用脚本自动化复制target
  10. 全国计算机等级一级考试套题,全国计算机等级考试一级试题及答案(10套)
  11. Unity WebGL自带VideoPlayer播放视频
  12. 金博宝芝灵K6医药管理软件吉度盘点机PDA盘点
  13. 文字闪图怎么做?如何制作gif闪图?
  14. 热点讨论:IT人,40岁以后能干什么?
  15. Win7快速启动栏设置及防止消失方法
  16. 如何写出难以维护的代码--代码命名
  17. 基于网络视频监控的人员考勤系统设计
  18. 通信原理 | 波段的划分
  19. 解决WPS字体的问题
  20. 域名解析、域名空间绑定,两种截然不同概念

热门文章

  1. 【论文阅读】Drug Similarity Integration Through Multi-view Graph Auto-Encoders | day4、5
  2. python温度转换代码_用python编写一个名为“convert_temp”的温度转换函数
  3. python pipline_python中sklearn的pipeline模块实例详解
  4. 湖南计算机软件水平考试,2021年湖南省计算机软考职称考试 网络工程师 信息系统项目管理师报名考试...
  5. 就地链表反转_链表常见问题总结(一)
  6. c语言中嵌套循环的作用,C语言中n层循环嵌套实现
  7. 吴军:为什么计算机不是万能的
  8. 安卓学习笔记43:初试开源框架Volley
  9. PHP学习笔记01: 安装PHP开发套件xampp
  10. 安卓案例:使用MPAndroidChart绘制饼状图、柱状图和折线图