2020-11-25 22:28:58 +08:00
|
|
|
import { toRaw, ref } from 'vue';
|
2020-11-25 21:26:10 +08:00
|
|
|
import router from '/@/router';
|
|
|
|
|
import { AppRouteRecordRaw } from '/@/router/types';
|
|
|
|
|
import { TabItem, tabStore } from '/@/store/modules/tab';
|
|
|
|
|
|
|
|
|
|
export function initAffixTabs() {
|
2020-11-25 22:28:58 +08:00
|
|
|
const affixList = ref<TabItem[]>([]);
|
2020-11-25 21:26:10 +08:00
|
|
|
/**
|
|
|
|
|
* @description: Filter all fixed routes
|
|
|
|
|
*/
|
|
|
|
|
function filterAffixTabs(routes: AppRouteRecordRaw[]) {
|
|
|
|
|
const tabs: TabItem[] = [];
|
|
|
|
|
routes &&
|
|
|
|
|
routes.forEach((route) => {
|
|
|
|
|
if (route.meta && route.meta.affix) {
|
|
|
|
|
tabs.push(toRaw(route) as TabItem);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return tabs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description: Set fixed tabs
|
|
|
|
|
*/
|
|
|
|
|
function addAffixTabs(): void {
|
|
|
|
|
const affixTabs = filterAffixTabs((router.getRoutes() as unknown) as AppRouteRecordRaw[]);
|
2020-11-25 22:28:58 +08:00
|
|
|
affixList.value = affixTabs;
|
2020-11-25 21:26:10 +08:00
|
|
|
for (const tab of affixTabs) {
|
|
|
|
|
tabStore.commitAddTab(tab);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-25 22:28:58 +08:00
|
|
|
|
2020-11-25 21:26:10 +08:00
|
|
|
let isAddAffix = false;
|
|
|
|
|
if (!isAddAffix) {
|
|
|
|
|
addAffixTabs();
|
|
|
|
|
isAddAffix = true;
|
|
|
|
|
}
|
2020-11-25 22:28:58 +08:00
|
|
|
return affixList.value.map((item) => item.meta?.title).filter(Boolean);
|
2020-11-25 21:26:10 +08:00
|
|
|
}
|