Commit 6bb19fb2d4fa57d8006281d52acd80baaa054b3e
1 parent
782cbc0a
feat(tree): add headerTitle slot
Showing
14 changed files
with
29 additions
and
21 deletions
CHANGELOG.zh_CN.md
src/components/Form/src/props.ts
src/components/Menu/src/BasicMenu.vue
... | ... | @@ -38,7 +38,7 @@ |
38 | 38 | |
39 | 39 | import { getCurrentParentPath } from '/@/router/menus'; |
40 | 40 | |
41 | - import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; | |
41 | + import { listenerRouteChange } from '/@/logics/mitt/routeChange'; | |
42 | 42 | import { getAllParentPath } from '/@/router/helper/menuHelper'; |
43 | 43 | |
44 | 44 | export default defineComponent({ |
... | ... | @@ -105,7 +105,7 @@ |
105 | 105 | return inlineCollapseOptions; |
106 | 106 | }); |
107 | 107 | |
108 | - listenerLastChangeTab((route) => { | |
108 | + listenerRouteChange((route) => { | |
109 | 109 | if (route.name === REDIRECT_NAME) return; |
110 | 110 | handleMenuChange(route); |
111 | 111 | currentActiveMenu.value = route.meta?.currentActiveMenu as string; | ... | ... |
src/components/SimpleMenu/src/SimpleMenu.vue
... | ... | @@ -27,7 +27,7 @@ |
27 | 27 | |
28 | 28 | import Menu from './components/Menu.vue'; |
29 | 29 | import SimpleSubMenu from './SimpleSubMenu.vue'; |
30 | - import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; | |
30 | + import { listenerRouteChange } from '/@/logics/mitt/routeChange'; | |
31 | 31 | import { propTypes } from '/@/utils/propTypes'; |
32 | 32 | import { REDIRECT_NAME } from '/@/router/constant'; |
33 | 33 | import { RouteLocationNormalizedLoaded, useRouter } from 'vue-router'; |
... | ... | @@ -91,7 +91,7 @@ |
91 | 91 | { immediate: true } |
92 | 92 | ); |
93 | 93 | |
94 | - listenerLastChangeTab((route) => { | |
94 | + listenerRouteChange((route) => { | |
95 | 95 | if (route.name === REDIRECT_NAME) return; |
96 | 96 | |
97 | 97 | currentActiveMenu.value = route.meta?.currentActiveMenu as string; | ... | ... |
src/components/Tree/src/TreeHeader.vue
1 | 1 | <template> |
2 | 2 | <div class="flex px-2 py-1.5 items-center border-b-1"> |
3 | - <BasicTitle :helpMessage="helpMessage" v-if="title">{{ title }}</BasicTitle> | |
3 | + <slot name="headerTitle" v-if="$slots.headerTitle"></slot> | |
4 | + <BasicTitle :helpMessage="helpMessage" v-if="!$slots.headerTitle && title">{{ | |
5 | + title | |
6 | + }}</BasicTitle> | |
4 | 7 | |
5 | 8 | <div class="flex flex-1 justify-end items-center cursor-pointer" v-if="search || toolbar"> |
6 | 9 | <div class="mr-1 w-2/3" v-if="search"> | ... | ... |
src/components/Tree/src/index.vue
... | ... | @@ -321,7 +321,7 @@ |
321 | 321 | } |
322 | 322 | return () => { |
323 | 323 | const { title, helpMessage, toolbar, search, checkable } = props; |
324 | - const showTitle = title || toolbar || search; | |
324 | + const showTitle = title || toolbar || search || slots.headerTitle; | |
325 | 325 | const scrollStyle: CSSProperties = { height: 'calc(100% - 38px)' }; |
326 | 326 | return ( |
327 | 327 | <div class={[prefixCls, 'h-full bg-white', attrs.class]}> |
... | ... | @@ -336,7 +336,9 @@ |
336 | 336 | helpMessage={helpMessage} |
337 | 337 | onStrictlyChange={onStrictlyChange} |
338 | 338 | onSearch={handleSearch} |
339 | - /> | |
339 | + > | |
340 | + {extendSlots(slots)} | |
341 | + </TreeHeader> | |
340 | 342 | )} |
341 | 343 | <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}> |
342 | 344 | <Tree {...unref(getBindValues)} showIcon={false}> | ... | ... |
src/hooks/web/useTitle.ts
... | ... | @@ -3,7 +3,7 @@ import { useTitle as usePageTitle } from '@vueuse/core'; |
3 | 3 | import { useGlobSetting } from '/@/hooks/setting'; |
4 | 4 | |
5 | 5 | import { REDIRECT_NAME } from '/@/router/constant'; |
6 | -import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; | |
6 | +import { listenerRouteChange } from '/@/logics/mitt/routeChange'; | |
7 | 7 | |
8 | 8 | export function useTitle() { |
9 | 9 | const { title } = useGlobSetting(); |
... | ... | @@ -11,7 +11,7 @@ export function useTitle() { |
11 | 11 | |
12 | 12 | const pageTitle = usePageTitle(); |
13 | 13 | |
14 | - listenerLastChangeTab((route) => { | |
14 | + listenerRouteChange((route) => { | |
15 | 15 | if (route.name === REDIRECT_NAME) { |
16 | 16 | return; |
17 | 17 | } | ... | ... |
src/layouts/default/sider/MixSider.vue
... | ... | @@ -101,7 +101,7 @@ |
101 | 101 | |
102 | 102 | import clickOutside from '/@/directives/clickOutside'; |
103 | 103 | import { getShallowMenus, getChildrenMenus, getCurrentParentPath } from '/@/router/menus'; |
104 | - import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; | |
104 | + import { listenerRouteChange } from '/@/logics/mitt/routeChange'; | |
105 | 105 | import { SimpleMenu } from '/@/components/SimpleMenu'; |
106 | 106 | |
107 | 107 | export default defineComponent({ |
... | ... | @@ -202,7 +202,7 @@ |
202 | 202 | menuModules.value = await getShallowMenus(); |
203 | 203 | }); |
204 | 204 | |
205 | - listenerLastChangeTab((route) => { | |
205 | + listenerRouteChange((route) => { | |
206 | 206 | currentRoute.value = route; |
207 | 207 | setActive(true); |
208 | 208 | if (unref(getCloseMixSidebarOnChange)) { | ... | ... |
src/layouts/default/tabs/index.vue
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; |
47 | 47 | |
48 | 48 | import { REDIRECT_NAME } from '/@/router/constant'; |
49 | - import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; | |
49 | + import { listenerRouteChange } from '/@/logics/mitt/routeChange'; | |
50 | 50 | |
51 | 51 | import router from '/@/router'; |
52 | 52 | |
... | ... | @@ -84,7 +84,7 @@ |
84 | 84 | ]; |
85 | 85 | }); |
86 | 86 | |
87 | - listenerLastChangeTab((route) => { | |
87 | + listenerRouteChange((route) => { | |
88 | 88 | const { name } = route; |
89 | 89 | if (name === REDIRECT_NAME || !route || !userStore.getTokenState) return; |
90 | 90 | ... | ... |
src/logics/mitt/tabChange.ts renamed to src/logics/mitt/routeChange.ts
... | ... | @@ -12,13 +12,13 @@ const key = Symbol(); |
12 | 12 | |
13 | 13 | let lastChangeTab: RouteLocationNormalized; |
14 | 14 | |
15 | -export function setLastChangeTab(lastChangeRoute: RouteLocationNormalized) { | |
15 | +export function setRouteChange(lastChangeRoute: RouteLocationNormalized) { | |
16 | 16 | const r = getRawRoute(lastChangeRoute); |
17 | 17 | mitt.emit(key, r); |
18 | 18 | lastChangeTab = r; |
19 | 19 | } |
20 | 20 | |
21 | -export function listenerLastChangeTab( | |
21 | +export function listenerRouteChange( | |
22 | 22 | callback: (route: RouteLocationNormalized) => void, |
23 | 23 | immediate = true |
24 | 24 | ) { | ... | ... |
src/router/guard/httpGuard.ts
... | ... | @@ -14,7 +14,7 @@ export function createHttpGuard(router: Router) { |
14 | 14 | } |
15 | 15 | router.beforeEach(async () => { |
16 | 16 | // Switching the route will delete the previous request |
17 | - removeAllHttpPending && axiosCanceler?.removeAllPending(); | |
17 | + axiosCanceler?.removeAllPending(); | |
18 | 18 | return true; |
19 | 19 | }); |
20 | 20 | } | ... | ... |
src/router/guard/pageGuard.ts
1 | 1 | import type { Router } from 'vue-router'; |
2 | -import { setLastChangeTab } from '/@/logics/mitt/tabChange'; | |
2 | +import { setRouteChange } from '/@/logics/mitt/routeChange'; | |
3 | 3 | |
4 | 4 | export function createPageGuard(router: Router) { |
5 | 5 | const loadedPageMap = new Map<string, boolean>(); |
... | ... | @@ -7,7 +7,7 @@ export function createPageGuard(router: Router) { |
7 | 7 | router.beforeEach(async (to) => { |
8 | 8 | to.meta.loaded = !!loadedPageMap.get(to.path); |
9 | 9 | // Notify routing changes |
10 | - setLastChangeTab(to); | |
10 | + setRouteChange(to); | |
11 | 11 | |
12 | 12 | return true; |
13 | 13 | }); | ... | ... |
src/router/guard/pageLoadingGuard.ts
src/router/guard/stateGuard.ts
... | ... | @@ -4,7 +4,7 @@ import { tabStore } from '/@/store/modules/tab'; |
4 | 4 | import { userStore } from '/@/store/modules/user'; |
5 | 5 | import { permissionStore } from '/@/store/modules/permission'; |
6 | 6 | import { PageEnum } from '/@/enums/pageEnum'; |
7 | -import { removeTabChangeListener } from '/@/logics/mitt/tabChange'; | |
7 | +import { removeTabChangeListener } from '/@/logics/mitt/routeChange'; | |
8 | 8 | |
9 | 9 | export function createStateGuard(router: Router) { |
10 | 10 | router.afterEach((to) => { | ... | ... |