提交 | 用户 | age
|
e23336
|
1 |
import type { AppRouteRecordRaw } from '/@/router/types'; |
V |
2 |
|
2f6253
|
3 |
import { computed, toRaw, unref } from 'vue'; |
陈 |
4 |
|
215d8b
|
5 |
import { useMultipleTabStore } from '/@/store/modules/multipleTab'; |
2f6253
|
6 |
|
be3a3e
|
7 |
import { uniqBy } from 'lodash-es'; |
2f6253
|
8 |
|
ba068b
|
9 |
import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; |
V |
10 |
|
215d8b
|
11 |
import { useRouter } from 'vue-router'; |
27e50b
|
12 |
|
2f6253
|
13 |
export function useFrameKeepAlive() { |
215d8b
|
14 |
const router = useRouter(); |
27e50b
|
15 |
const { currentRoute } = router; |
0692b4
|
16 |
const { getShowMultipleTab } = useMultipleTabSetting(); |
215d8b
|
17 |
const tabStore = useMultipleTabStore(); |
ba068b
|
18 |
const getFramePages = computed(() => { |
V |
19 |
const ret = |
|
20 |
getAllFramePages((toRaw(router.getRoutes()) as unknown) as AppRouteRecordRaw[]) || []; |
|
21 |
return ret; |
|
22 |
}); |
|
23 |
|
|
24 |
const getOpenTabList = computed((): string[] => { |
215d8b
|
25 |
return tabStore.getTabList.reduce((prev: string[], next) => { |
ba068b
|
26 |
if (next.meta && Reflect.has(next.meta, 'frameSrc')) { |
c303ec
|
27 |
prev.push(next.name as string); |
ba068b
|
28 |
} |
V |
29 |
return prev; |
|
30 |
}, []); |
|
31 |
}); |
2f6253
|
32 |
|
陈 |
33 |
function getAllFramePages(routes: AppRouteRecordRaw[]): AppRouteRecordRaw[] { |
03b602
|
34 |
let res: AppRouteRecordRaw[] = []; |
2f6253
|
35 |
for (const route of routes) { |
陈 |
36 |
const { meta: { frameSrc } = {}, children } = route; |
|
37 |
if (frameSrc) { |
|
38 |
res.push(route); |
|
39 |
} |
|
40 |
if (children && children.length) { |
|
41 |
res.push(...getAllFramePages(children)); |
|
42 |
} |
|
43 |
} |
be3a3e
|
44 |
res = uniqBy(res, 'name'); |
2f6253
|
45 |
return res; |
陈 |
46 |
} |
|
47 |
|
|
48 |
function showIframe(item: AppRouteRecordRaw) { |
c303ec
|
49 |
return item.name === unref(currentRoute).name; |
2f6253
|
50 |
} |
陈 |
51 |
|
c303ec
|
52 |
function hasRenderFrame(name: string) { |
V |
53 |
if (!unref(getShowMultipleTab)) { |
73cee0
|
54 |
return router.currentRoute.value.name === name; |
c303ec
|
55 |
} |
V |
56 |
return unref(getOpenTabList).includes(name); |
2f6253
|
57 |
} |
73cee0
|
58 |
|
2f6253
|
59 |
return { hasRenderFrame, getFramePages, showIframe, getAllFramePages }; |
陈 |
60 |
} |