Commit 6bb19fb2d4fa57d8006281d52acd80baaa054b3e

Authored by Vben
1 parent 782cbc0a

feat(tree): add headerTitle slot

CHANGELOG.zh_CN.md
1 1 ## Wip
2 2  
  3 +### ✨ Features
  4 +
  5 +- 新增`headerTitle` slot
  6 +
3 7 ### ✨ Refactor
4 8  
5 9 - 移除 useFullScreen 函数
... ...
src/components/Form/src/props.ts
... ... @@ -25,7 +25,6 @@ export const basicProps = {
25 25 schemas: {
26 26 type: [Array] as PropType<FormSchema[]>,
27 27 default: () => [],
28   - required: true,
29 28 },
30 29 mergeDynamicData: {
31 30 type: Object as PropType<Recordable>,
... ...
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 &#39;@vueuse/core&#39;;
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
... ... @@ -25,7 +25,7 @@ export function createPageLoadingGuard(router: Router) {
25 25 if (unref(getOpenPageLoading)) {
26 26 setTimeout(() => {
27 27 appStore.commitPageLoadingState(false);
28   - }, 300);
  28 + }, 220);
29 29 }
30 30 return true;
31 31 });
... ...
src/router/guard/stateGuard.ts
... ... @@ -4,7 +4,7 @@ import { tabStore } from &#39;/@/store/modules/tab&#39;;
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) => {
... ...