vue3后台管理框架geeker admin -- ThemeDrawer 大标题布局样式 代码分析0 环境 Node.
0 环境
1 参考文档
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();
};
第二个是setAsideTheme
,关系到主题的设置,这里以前文章有详细介绍。一般就是页面布局,暗黑模式,侧边栏反转色等,具体的如下图:
这里除了主题颜色外,其它都在setAsideTheme
管控范围。
简单观察:最明显的是侧边栏背景色切换。
仔细看这里的侧边栏反转色,v-model绑定的是"asideInverted"
, 这里的asideInverted
是从useGlobalStore
里取的,看下图:
global.ts
第27行,asideInverted默认是false
。
一旦我点击了侧边栏反转色的按钮,激活它,就是将asideInverted设置为true
,看下图第75行,asideInverted.value
为真,type = "inverted"
生效,第77行,asideTheme[type!]
这里asideTheme
会拿到inverted
里的值,看下面第二张图。
ctrl+鼠标悬浮在asideTheme
上,会看到一个对象,有--el-aside-logo-text-color
和--el-aside-border-color
的配色。
它作用在下图。但是你会发现不单单是图标标题颜色和右边框变化了,侧边栏背景色也变黑了呢。
其实是设置菜单样式,setMenuTheme的实现
第60行到70行,这里重要的判断是64行,layout.value
不等于transverse
,asideInverted.value
为真,type
为inverted
,
SubMenu
组件中可以看到颜色的定义。
一旦改变了这些颜色,el-menu
及子组件相关背景色,选中和悬浮色啥的都会跟着改变。
再看头部反转色,激活开关按钮,直接感受头部变黑。
这里的开关按钮关联的是headerInverted
,然后找到setHeaderTheme
点进去,如下面第二张图:
定位到setHeaderTheme
实现,这里命中的是:if (headerInverted.value) type = "inverted";
,此刻headerInverted
为真,headerTheme
会得到inverted
对应的值。这里设置菜单样式,if判断没有生效的,只是默认,没必要再去看了。如下图二:
它们用在哪里呢,如下图:
总结
setAsideTheme
你只要记住它的功能是设置侧边栏样式以及设置菜单样式即可。还有菜单样式的设置,以及头样式设置。不管是头样式设置还是侧边栏设置,都会用到菜单样式。核心的点就是,开关控制了type
类型,得到对应的对象,这个对象决定了你要选中这片区域的背景色、颜色。。。
转载自:https://juejin.cn/post/7418877490871943231