【vue2.7.16系列】手把手教你搭建后台系统__前端layout(19)

news/2024/11/13 23:16:12 标签: 前端, vue, 布局, 组件, 后台系统, 路由, 导航

layout布局组件

将之前Home.vue删除,并将其内容放到src/layout/index.vue中,因为后台布局基本都是这样的,所以我们将其当做组件封装起来。然后分别拆分出Sidebar.vue侧边栏组件Navbar.vue头部组件

// layout/index.vue
<template>
  <el-container class="app_container">
    <!-- 侧边栏 -->
    <sidebar></sidebar>
    <el-container>
      <!-- 头部 -->
      <el-header style="text-align: right; font-size: 12px">
        <navbar></navbar>
      </el-header>
      <!-- 内容 -->
      <el-main class="app-main">
        <transition name="fade-transform" mode="out-in">
          <router-view :key="key" />
        </transition>
      </el-main>
    </el-container>
  </el-container>
</template>
<script>
import { Sidebar, Navbar } from './components';
export default {
  name: 'LayoutPage',
  computed: {
    key() {
      return this.$route.path;
    }
  },
  components: {
    Sidebar,
    Navbar
  },
  data() {
    return {};
  },
  mounted() {},
  methods: {}
};
</script>
<style lang="scss" scoped>
.app_container {
  height: 100%;
}
.el-header {
  color: #333;
  line-height: 60px;
  background-color: #b3c0d1;
}
.app-main {
  width: 100%;
  min-height: calc(100vh - 60px);
  background: #f5f7f9;
}
</style>

layout/components/index.js

// layout/components/index.js
export { default as Navbar } from './Navbar';
export { default as Sidebar } from './Sidebar';

layout/components/Navbar.vue

// layout/components/Navbar.vue
<template>
 <div>
    <span>{{userInfo.account}}</span>
    <el-dropdown>
      <i class="el-icon-setting" style="margin-right: 15px"></i>
      <el-dropdown-menu slot="dropdown">
        <el-dropdown-item @click.native="handleLogout">退出登录</el-dropdown-item>
      </el-dropdown-menu>
    </el-dropdown>
 </div>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
  name: 'NavBar',
  computed: {
    ...mapGetters(['userInfo'])
  },
  methods: {
    async handleLogout() {
      await this.$store.dispatch('account/logout');
      this.$router.push(`/admin/login?redirect=${this.$route.fullPath}`);
    }
  }
};
</script>
<style lang="scss" scoped>

</style>

layout/components/Sidebar.vue

// layout/components/Sidebar.vue
<template>
  <el-aside class="aside">
    <el-menu :default-openeds="['3']">
      <el-submenu index="3">
        <template slot="title"><i class="el-icon-setting"></i>设置</template>
        <el-menu-item index="3-1" @click="$router.push('/admin/adminList')">管理员列表</el-menu-item>
        <el-menu-item index="3-2" @click="$router.push('/admin/roleList')">身份管理</el-menu-item>
        <el-menu-item index="3-3" @click="$router.push('/admin/menuList')">菜单管理</el-menu-item>
      </el-submenu>
    </el-menu>
  </el-aside>
</template>
<script>
export default {
  name: 'SideBar'
};
</script>
<style lang="scss" scoped>
.aside {
  color: #333;
  width: 200px !important;
  background-color: rgb(238, 241, 246);
}
</style>

路由使用布局组件

伪代码:

import Layout from '@/layout'
...
{
    path: '/admin',
    name: 'admin',
    component: Layout,
    redirect: '/admin/index',
    children: [
      {
        path: 'index',
        name: 'index',
        component: () => import('@/views/Index')
      },
      {
        path: 'adminList',
        name: 'adminList',
        component: () => import('@/views/system/admin/adminList')
      },
      {
        path: 'roleList',
        name: 'roleList',
        component: () => import('@/views/system/admin/roleList')
      },
      {
        path: 'menuList',
        name: 'menuList',
        component: () => import('@/views/system/admin/menuList')
      },
    ]
  },

至此完成。。。未有详尽之处,后续迭代。


http://www.niftyadmin.cn/n/5750877.html

相关文章

基于Multisim人数出入加减计数统计电路(含仿真和报告)

【全套资料.zip】人数出入加减计数统计电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 设计两路光控电路&#xff0c;一路放置在入口&#xff0c;另一路设置在出口&#xff0c;当有人…

「QT」几何数据类 之 QVector4D 四维向量类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

使用pytest+openpyxl做接口自动化遇到的问题

最近使用pytestopenpyxl做了个接口自动化的小项目&#xff0c;遇到了一些问题。 首先&#xff0c;使用pytest这个框架&#xff0c;主要是使用了pytest.fixture, pytest.mark.parametrize这两个fixture去做参数化&#xff0c;里面注入的数据是用openpyxl来实现的。 接口介绍&a…

Bilibili-超能用户榜入口优化-技术方案反思与总结

目录 客户端实现&#xff1a; 高能用户入口实现逻辑&#xff1a; 接口服务信息&#xff08;服务端下发&#xff09;&#xff1a; 执行方案&#xff1a; (1)数据类新增服务端下发字段 ​编辑 (2) UI添加 寻找思路&#xff1a; &#xff08;3&#xff09;超能用户icon显示…

第03章 文件编程

目标 了解Linux系统文件IO/标准IO基本概念掌握Linux系统文件IO/标准IO常用函数掌握Linux系统文件属性常用函数掌握Linux系统目录文件常用函数 3.1 Linux系统概述 3.1.1 预备知识&#xff08;相关概念&#xff09; &#xff08;1&#xff09;应用程序 和 内核程序 应用程序是…

02-URL查询参数

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

django博客项目实现站内搜索功能

Django博客站内搜索功能实现 1. 准备工作 确保Django项目已经创建好&#xff0c;并且有一个用于存储博客文章的模型&#xff08;例如Post&#xff09;。 2. 定义搜索表单 在应用目录下创建一个forms.py文件&#xff0c;定义一个搜索表单。 from django import formsclass …