一、layout结构搭建

1. 页面结构主要分为三部分:

(1) 左侧菜单menu

(2)顶部navbar

(3)中间内容区main

image.png 2.layout组件编写

(1)创建三个区域组件,引入到layout中

先分左右,再分上下

  1. <template>
  2. <div class="app-wrapper">
  3. <!-- 侧边栏 -->
  4. <div class="side-container">
  5. <SideBar />
  6. </div>
  7. <div class="right-container">
  8. <!-- 顶部导航栏 navbar -->
  9. <div class="fixed-header">
  10. <NavBar />
  11. </div>
  12. <AppMain />
  13. <!-- 内容区 main -->
  14. </div>
  15. </div>
  16. </template>
  17. <script setup>
  18. import {} from 'vue'
  19. import SideBar from './components/sideBar'
  20. import AppMain from './components/appMain'
  21. import NavBar from './components/navbar'

(2)创建style文件夹,管理css文件

a.variables.scss 存放scss变量 :scss常量和js共享常量
  1. // 定义常量
  2. // sidebar
  3. $menuText: #bfcbd9;
  4. $menuActiveText: #ffffff;
  5. $subMenuActiveText: #c7eb12;
  6. $menuBg: #304156;
  7. $menuHover: #263445;
  8. $subMenuBg: #1f2d3d;
  9. $subMenuHover: #001528;
  10. $sideBarWidth: 210px;
  11. $hideSideBarWidth: 54px;
  12. $sideBarDuration: 0.28s;
  13. $navBarBg: #ffffff;
  14. $Hamburger: #000000;
  15. // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
  16. // JS 与 scss 共享变量,在 scss 中通过 :export 进行导出,在 js 中可通过 ESM 进行导入
  17. :export {
  18. menuText: $menuText;
  19. menuActiveText: $menuActiveText;
  20. subMenuActiveText: $subMenuActiveText;
  21. menuBg: $menuBg;
  22. menuHover: $menuHover;
  23. subMenuBg: $subMenuBg;
  24. subMenuHover: $subMenuHover;
  25. sideBarWidth: $sideBarWidth;
  26. navBarBg: $navBarBg;
  27. Hamburger: $Hamburger;
  28. }

b.mixinx.scss 存放mixin 可复用样式

c.sidebar.scss 存放侧边栏样式

(3)在index.scss中引入上面的文件

a.在scss中,引入其他文件 用@import
  1. @import './variables.scss'

b.在script中使用scss常量

在script引入变量,可以在template中直接使用

  1. <template>
  2. <div class="sidebar-container" :style="{ background: variables.menuBg }">
  3. <SideBar></SideBar>
  4. </div>
  5. </template>
  6. <script setup>
  7. import variables from '@/styles/variables.scss'
  8. </script>

c. scss中 ‘ #{} ‘语法的作用是,将内部当作scss变量使用

二、本章包含了几个核心解决方案

1.用户动态退出方案

2.动态侧边栏方案

3.动态面包屑方案

四、其他小功能

1.退出逻辑封装

2.伸缩侧边栏动画

3.vue3动画

4.组件状态驱动的动态css值