likes
comments
collection
share

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

作者站长头像
站长
· 阅读数 22

0 环境

1 参考文档

geeker admin官方文档

element-plus官方文档

vue router官方文档

ToolBarRight.vue

useUserStore

mitt

ThemeDrawer/index.vue

ThemeDrawer/index.scss

2 前言

主要是介绍ThemeDrawer/index.vue,位置在src/layouts/components/ThemeDrawer/index.vue。下面我说的默认就是该index.vue。还有个重要的ts,@/hooks/useTheme.ts,比如setAsideTheme()

3 正文

先看index.vue下的第8行到52行,也就是<div class="layout-box">...</div>。四种布局方式,它们都有@click="setLayout('xxx')"。先找到对应的实现,就是第178行到182行。代码如下:

这里做了两步操作,第一个是设置全局state,将val赋值给layout。如下图:

// 设置布局方式
const setLayout = (val: LayoutType) => {
  globalStore.setGlobalState("layout", val);
  setAsideTheme();
};

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

第二个是setAsideTheme,关系到主题的设置,这里以前文章有详细介绍。一般就是页面布局,暗黑模式,侧边栏反转色等,具体的如下图:

这里除了主题颜色外,其它都在setAsideTheme管控范围。

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

简单观察:最明显的是侧边栏背景色切换。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

仔细看这里的侧边栏反转色,v-model绑定的是"asideInverted", 这里的asideInverted是从useGlobalStore里取的,看下图: global.ts第27行,asideInverted默认是falsevue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

一旦我点击了侧边栏反转色的按钮,激活它,就是将asideInverted设置为true,看下图第75行,asideInverted.value为真,type = "inverted"生效,第77行,asideTheme[type!]这里asideTheme会拿到inverted里的值,看下面第二张图。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

ctrl+鼠标悬浮在asideTheme上,会看到一个对象,有--el-aside-logo-text-color--el-aside-border-color的配色。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

它作用在下图。但是你会发现不单单是图标标题颜色和右边框变化了,侧边栏背景色也变黑了呢。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

其实是设置菜单样式,setMenuTheme的实现第60行到70行,这里重要的判断是64行,layout.value不等于transverseasideInverted.value为真,typeinvertedvue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

SubMenu组件中可以看到颜色的定义。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

一旦改变了这些颜色,el-menu及子组件相关背景色,选中和悬浮色啥的都会跟着改变。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

再看头部反转色,激活开关按钮,直接感受头部变黑。 vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

这里的开关按钮关联的是headerInverted,然后找到setHeaderTheme点进去,如下面第二张图: vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

定位到setHeaderTheme实现,这里命中的是:if (headerInverted.value) type = "inverted";,此刻headerInverted为真,headerTheme会得到inverted对应的值。这里设置菜单样式,if判断没有生效的,只是默认,没必要再去看了。如下图二: vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

它们用在哪里呢,如下图:

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.

总结

setAsideTheme你只要记住它的功能是设置侧边栏样式以及设置菜单样式即可。还有菜单样式的设置,以及头样式设置。不管是头样式设置还是侧边栏设置,都会用到菜单样式。核心的点就是,开关控制了type类型,得到对应的对象,这个对象决定了你要选中这片区域的背景色、颜色。。。

转载自:https://juejin.cn/post/7418877490871943231
评论
请登录