vue3后台管理框架geeker admin -- 标签栏tab的点击和删除、MoreButton按钮

378 阅读3分钟

0 环境

1 参考文档

geeker admin官方文档

element-plus官方文档

vue router官方文档

useUserStore

el-tabs

Sortablejs

2 tabs 拖拽排序

如下图代码:

onMounted里的initTabs解释过了,现在就剩tabsDrop,它是用来标签来回拖拽的。 image.png

结合下图代码,看tabsDrop的实现,Sortablejs具体看上面提供的文档入口,选择器找到想要拖拽的那一列的上一层(.el-tabs__nav),参考下面的截图,指定哪些元素可以被拖拽(el-tab-pane),排序时的动画速度,onEnd 事件来获取排序后的结果,这里先获取标签数组,拿到拖拽前的标签的位置,以及将该拖拽的标签挪到新的位置,然后将tabsList重新赋值给this.tabsMenuList(this.tabsMenuList = tabsMenuList;),或者说更新标签数组。 image.png

image.png

3 MoreButton按钮

MoreButton按钮的位置,看下图: image.png

它在代码的位置,看下图。 image.png

el-dropdown是下拉菜单,点击生效,:teleported="false" 防止下拉菜单被其他元素遮挡。

进入正题,分析下图代码:

第3-5行代码,自定义下拉按钮的图标。第8-29行,就是按钮+文字,这里的重点就是clickimage.png

我们先看refresh的实现,代码如下图:

第一行呢,说它是一个注入函数,那它的提供者在哪里呢,看 src/layouts/components/Main/index.vue,如下图的代码,默认为true,控制的是tab标签下面的那块大的内容区域,大概盲猜是隐藏、显示组件的作用。再回来看setTimeout函数,它起到延迟执行代码,在下一个事件循环中执行。再往下,若isKeepAlive有缓存,移除缓存,refreshCurrentPage就是下面的代码,先隐藏,然后等刷新操作完成后,重新将当前路由的缓存名称添加到 keepAliveStore 中,并且显示标签栏下面的区域。 image.png

image.png

再往下maximize这里面的最大化也是在src/layouts/components/Main/index.vue里面的,相当于全局变量的一个控制。 image.png

再看如下图代码:

首先关闭当前页,先判断这个标签是不是固定死的,是不是不允许被删除,若是固定的,直接返回。否则直接移除。 再往下是关闭所有,结合下面closeMultipleTab的代码,item.path === tabsMenuValuetabsMenuValue值不存在,那么就是假,或者 !item.close 等于 route.meta.isAffix,就是假如是这个标签是固定的话,就保留。并同步更新标签页的缓存状态。 image.png

image.png

**tabStore.closeMultipleTab(route.fullPath)**就和上面的一样。 image.png

在看关闭左侧和右侧,代码如下图: image.png

这里就是获取当前标签的索引位置,若是关闭左侧,就是0到当前索引,否则就是当前后面一个索引,到这个标签数组长度的为结束。标签数组在过滤掉不需要的索引返回。在同步缓存。 image.png

总结

这里主要了解的是closeTabsOnSidecloseMultipleTab,也就是关闭左侧、右侧,和关闭全部、关闭其它,大致了解思路即可。