Commit 6bb19fb2d4fa57d8006281d52acd80baaa054b3e

Authored by Vben
1 parent 782cbc0a

feat(tree): add headerTitle slot

CHANGELOG.zh_CN.md
1 ## Wip 1 ## Wip
2 2
  3 +### ✨ Features
  4 +
  5 +- 新增`headerTitle` slot
  6 +
3 ### ✨ Refactor 7 ### ✨ Refactor
4 8
5 - 移除 useFullScreen 函数 9 - 移除 useFullScreen 函数
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 &#39;@vueuse/core&#39;; @@ -3,7 +3,7 @@ import { useTitle as usePageTitle } from &#39;@vueuse/core&#39;;
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 &#39;/@/store/modules/tab&#39;; @@ -4,7 +4,7 @@ import { tabStore } from &#39;/@/store/modules/tab&#39;;
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) => {