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