从零开始Vue3+Element Plus的后台管理系统(二)——Layout页面布局的实现

这篇具有很好参考价值的文章主要介绍了从零开始Vue3+Element Plus的后台管理系统(二)——Layout页面布局的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目搭建好之后,开始写基本的布局。后台管理系统的布局3大元素:头部、侧栏、主要内容,各种布局结构相差不大,我选择了下图所示的布局,其中头部、侧栏、页签在页面中是固定的,只有主要内容容器会跟随页面滚动。

elementplus layout,从零开始Vue3+Element Plus的后台管理系统,前端,vue.js,javascript

Layout布局的目录结构

- layout
    |- header                 // 头部
        index.vue
    |- sidebar                // 侧栏
        index.vue
        SidebarItem.vue        // 侧栏菜单递归组件- tags                   // 页签
        index.vue
    index.vue                  // 布局入口

代码就不贴了,仓库有😄

侧栏 Sidebar

侧栏使用el-menu组件,考虑到实际项目中可能不止2级菜单,所以直接使用递归组件实现。

侧栏的数据直接来自于我们配置的前端路由,后期会考虑增加多种侧边菜单路由挂载方式。

布局样式实现

最开始我做布局的样式,是通过CSS计算主要内容的高度,让滚动条只出现在主要内容容器内,这样就不用对头部、页签应用 position:fixed,也可以实现这些元素的固定。

在最新的一版,因为想要实现更有意思的效果——当主要内容滚动到头部,若隐若现的感觉(此处参考了tailwind官网),重新修改了布局的样式

backdrop-filter

elementplus layout,从零开始Vue3+Element Plus的后台管理系统,前端,vue.js,javascript

头部、侧栏、页签都使用position:fixed固定,主要内容区域不再限制高度,让它在整个页面上下滚动。
滚动到头部下面的效果,主要使用CSS属性 backdrop-filter

backdrop-filter CSS 属性可以让你为一个元素后面区域添加图形效果(如模糊或颜色偏移)。因为它适用于元素背后的所有元素,为了看到效果,必须使元素或其背景至少部分透明。

此处使用的是tw-backdrop-blur: blur(4px) ,backdrop-filter是一个很有意思的CSS属性,很像Photo shop中的图层混合模式,大家感兴趣的话可以去MDN详细查阅并亲自试一试。

对应tailwind中的backdrop-blur-sm https://www.tailwindcss.cn/docs/backdrop-blur#class-reference

暗黑模式CSS切换

elementplus layout,从零开始Vue3+Element Plus的后台管理系统,前端,vue.js,javascript

方式1. tailwind通过增加dark:来标记暗黑模式下使用的class

<div class="v-header backdrop-blur-sm bg-white/75 dark:bg-black/75">

方式2. element plus预设的暗黑模式,可以通过使用CSS变量切换样式

border: 1px solid var(--el-border-color);
background: var(--el-fill-color-blank);

方式3. 直接书写暗黑模式下的CSS

因为暗黑模式实际就是在html标签增加了.dark类,所以直接针对.dark书写对应css即可

目前在项目代码中,1、2两种方式都在使用,因为我还没确定哪种更好,还需要多尝试,第3种开始也使用过,后来使用1,2取代之。

实现一键切换暗黑模式

上面说了样式的实现,那么如何实现在头部点击一下就自由切换白天黑夜呢?

这里使用vueuse,直接贴主要代码

<el-switch
        v-model="darkMode"
        inline-prompt
        :active-icon="Moon"
        :inactive-icon="Sunny"
        class="mr-2"
        @change="toggleDark()"
        style="--el-switch-on-color: #0960bd; --el-switch-off-color: #ff6600"
      />

import { useDark, useToggle } from '@vueuse/core'
import { Sunny, Moon } from '@element-plus/icons-vue'

const isDark = useDark()
let darkMode = ref(false)
darkMode.value = isDark.value

const toggleDark = useToggle(isDark)

嵌套路由

在router文件夹建立对应路由ts,即可让所需页面应用上面的布局

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import Home from '~/layout/index.vue'

const routes: RouteRecordRaw[] = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    redirect: '/dashboard/workbench',
    children: [{
        path: '/about',
        name: 'about',
        meta: {
          title: '关于',
          icon: 'Mic',
          order: 100
        },
        component: () => import('~/views/system/About.vue')
      }
      ...
    ]
  },
  ...

Keep-Alive 和唯一根节点

Vue3在模板文件中不需要唯一根节点,然而当我使用keep-alive的时候,发现如果使用了多个根节点,点击对应路由打开页面是空白的,transition也失效了。

所以尽管不需要唯一根节点这个新特性看起来很诱人,我最终还是放弃了。

<div class="main-content" :class="{ 'content-collapse': sidebar.collapse }">
    <router-view v-slot="{ Component }">
      <transition name="move" mode="out-in">
        <keep-alive :include="tags.nameList">
          <component :is="Component"></component>
        </keep-alive>
      </transition>
    </router-view>
  </div>

至此,一个简单的布局就完成了,接下来可以愉快的写一些功能页面了。文章来源地址https://www.toymoban.com/news/detail-589598.html

到了这里,关于从零开始Vue3+Element Plus的后台管理系统(二)——Layout页面布局的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包