Skip to content

Commit 5f2a927

Browse files
committedOct 10, 2020
perf: optimized page switching effect
1 parent 03b6025 commit 5f2a927

File tree

12 files changed

+47
-40
lines changed

12 files changed

+47
-40
lines changed
 

‎package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vben-admin-2.0",
3-
"version": "2.0.0-beta.4",
3+
"version": "2.0.0-beta.5",
44
"scripts": {
55
"bootstrap": "yarn install",
66
"serve": "ts-node --project ./build/tsconfig.json ./build/script/preserve && cross-env NODE_ENV=development vite",
@@ -55,7 +55,6 @@
5555
"@typescript-eslint/parser": "^4.4.0",
5656
"@vue/compiler-sfc": "^3.0.0",
5757
"autoprefixer": "^9.8.6",
58-
"babel-plugin-import": "^1.13.0",
5958
"commitizen": "^4.2.1",
6059
"conventional-changelog-cli": "^2.1.0",
6160
"conventional-changelog-custom-config": "^0.3.1",

‎src/components/Menu/src/BasicMenu.tsx

+12-15
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
import type { MenuState } from './types';
22
import type { Menu as MenuType } from '/@/router/types';
33

4-
import {
5-
computed,
6-
defineComponent,
7-
unref,
8-
reactive,
9-
toRef,
10-
watch,
11-
onMounted,
12-
watchEffect,
13-
ref,
14-
} from 'vue';
4+
import { computed, defineComponent, unref, reactive, toRef, watch, onMounted, ref } from 'vue';
155
import { basicProps } from './props';
166
import { Menu } from 'ant-design-vue';
177
import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
@@ -106,11 +96,18 @@ export default defineComponent({
10696
getParentPath();
10797
}
10898
);
109-
watchEffect(() => {
110-
if (props.items) {
111-
handleMenuChange();
99+
100+
watch(
101+
() => props.items,
102+
() => {
103+
if (props.items) {
104+
handleMenuChange();
105+
}
106+
},
107+
{
108+
immediate: true,
112109
}
113-
});
110+
);
114111

115112
async function getParentPath() {
116113
const { appendClass } = props;

‎src/layouts/default/LayoutSideBar.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ export default defineComponent({
158158
menuSetting: { theme, split: splitMenu },
159159
} = unref(getProjectConfigRef);
160160
const { getCollapsedState, getMenuWidthState } = menuStore;
161-
162161
return (
163162
<Layout.Sider
164163
onCollapse={onCollapseChange}

‎src/layouts/default/index.less

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
@import (reference) '../../design/index.less';
22

3+
.ant-menu-submenu .ant-menu-sub {
4+
transition: background 0.1s cubic-bezier(0.645, 0.045, 0.355, 1) 0s,
5+
padding 0.1s cubic-bezier(0.645, 0.045, 0.355, 1) 0s !important;
6+
}
7+
38
.default-layout {
49
&__content {
510
position: relative;

‎src/layouts/default/setting/SettingDrawer.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ export default defineComponent({
262262
size="small"
263263
min={0}
264264
onChange={(e) => {
265-
baseHandler('menuWidth', e);
265+
baseHandler('lockTime', e);
266266
}}
267267
defaultValue={appStore.getProjectConfig.lockTime}
268268
formatter={(value: string) => {
@@ -448,7 +448,7 @@ export default defineComponent({
448448
},
449449
};
450450
}
451-
if (event === 'menuWidth') {
451+
if (event === 'lockTime') {
452452
config = {
453453
lockTime: value,
454454
};

‎src/layouts/iframe/useFrameKeepAlive.ts

-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ export function useFrameKeepAlive() {
3232
const getFramePages = computed(() => {
3333
const ret =
3434
getAllFramePages((toRaw(router.getRoutes()) as unknown) as AppRouteRecordRaw[]) || [];
35-
console.log('======================');
36-
console.log(ret);
37-
console.log('======================');
3835
return ret;
3936
});
4037

‎src/layouts/page/index.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export default defineComponent({
4040
<RouterView>
4141
{{
4242
default: ({ Component, route }: { Component: any; route: RouteLocation }) => {
43+
const name = route.meta.inTab ? ' ' : null;
4344
const Content = openCache ? (
4445
<KeepAlive max={max} include={cacheTabs}>
4546
<Component {...route.params} />
@@ -50,7 +51,7 @@ export default defineComponent({
5051
return openRouterTransition ? (
5152
<Transition
5253
{...on}
53-
name={route.meta.transitionName || routerTransition}
54+
name={name || route.meta.transitionName || routerTransition}
5455
mode="out-in"
5556
>
5657
{() => Content}

‎src/router/guard/progressGuard.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@ import type { Router } from 'vue-router';
22

33
import NProgress from 'nprogress';
44
import 'nprogress/nprogress.css';
5+
import { getIsOpenTab } from '/@/utils/helper/routeHelper';
56

67
export function createProgressGuard(router: Router) {
7-
NProgress.inc(0.1);
8-
NProgress.configure({ easing: 'ease', speed: 200, showSpinner: false });
8+
// NProgress.inc(0.1);
9+
// NProgress.configure({ easing: 'ease', speed: 200, showSpinner: false });
910

10-
router.beforeEach(async () => {
11-
NProgress.start();
11+
router.beforeEach(async (to) => {
12+
const isOpen = getIsOpenTab(to.path);
13+
to.meta.inTab = isOpen;
14+
!isOpen && NProgress.start();
1215
return true;
1316
});
14-
router.afterEach(async () => {
15-
NProgress.done();
17+
router.afterEach(async (to) => {
18+
!to.meta.inTab && NProgress.done();
1619
return true;
1720
});
1821
}

‎src/router/types.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ export interface RouteMeta {
2929

3030
// close loading
3131
afterCloseLoading?: boolean;
32+
33+
inTab?: boolean;
3234
}
3335

3436
export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta'> {

‎src/useApp.tsx ‎src/useApp.ts

File renamed without changes.

‎src/utils/helper/routeHelper.ts

+12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import type { AppRouteModule, AppRouteRecordRaw } from '/@/router/types';
22
import type { RouteRecordRaw } from 'vue-router';
33

4+
import { appStore } from '/@/store/modules/app';
5+
import { tabStore } from '/@/store/modules/tab';
46
import { createRouter, createWebHashHistory } from 'vue-router';
57
import { toRaw } from 'vue';
68
import { PAGE_LAYOUT_COMPONENT } from '/@/router/constant';
@@ -45,3 +47,13 @@ export function transformObjToRoute(routeList: AppRouteModule[]) {
4547
});
4648
return routeList;
4749
}
50+
51+
export function getIsOpenTab(toPath: string) {
52+
const { openKeepAlive, multiTabsSetting: { show } = {} } = appStore.getProjectConfig;
53+
54+
if (show && openKeepAlive) {
55+
const tabList = tabStore.getTabsState;
56+
return tabList.some((tab) => tab.path === toPath);
57+
}
58+
return false;
59+
}

‎yarn.lock

+2-10
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
dependencies:
9696
"@babel/types" "^7.11.0"
9797

98-
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4":
98+
"@babel/helper-module-imports@^7.10.4":
9999
version "7.10.4"
100100
resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
101101
integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
@@ -175,7 +175,7 @@
175175
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037"
176176
integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
177177

178-
"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2":
178+
"@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2":
179179
version "7.11.2"
180180
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
181181
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
@@ -1214,14 +1214,6 @@ babel-helper-vue-jsx-merge-props@^2.0.3:
12141214
resolved "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6"
12151215
integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==
12161216

1217-
babel-plugin-import@^1.13.0:
1218-
version "1.13.0"
1219-
resolved "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.13.0.tgz#c532fd533df9db53b47d4d4db3676090fc5c07a5"
1220-
integrity sha512-bHU8m0SrY89ub2hBBuYjbennOeH0YUYkVpH6jxKFk0uD8rhN+0jNHIPtXnac+Vn7N/hgkLGGDcIoYK7je3Hhew==
1221-
dependencies:
1222-
"@babel/helper-module-imports" "^7.0.0"
1223-
"@babel/runtime" "^7.0.0"
1224-
12251217
bail@^1.0.0:
12261218
version "1.0.5"
12271219
resolved "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"

0 commit comments

Comments
 (0)