Commit 41d79008c55c96a5aeda5bb2a23d70575fc41333

Authored by vben
1 parent 0692b479

refactor: refactor setting

CHANGELOG.zh_CN.md
... ... @@ -3,6 +3,7 @@
3 3 ### ✨ Refactor
4 4  
5 5 - 重构整体 layout。更改代码实现方式。代码更精简
  6 +- 配置项重构
6 7  
7 8 ### ✨ Features
8 9  
... ... @@ -11,6 +12,7 @@
11 12 ### 🎫 Chores
12 13  
13 14 - 移除 messageSetting 配置
  15 +- 更新 antdv 到`2.0.0-rc.2`
14 16 - 暂时删除 `@vueuse/core`.等稳定后在集成。目前不太稳定。
15 17  
16 18 ## 2.0.0-rc.11 (2020-11-18)
... ...
package.json
... ... @@ -22,7 +22,7 @@
22 22 },
23 23 "dependencies": {
24 24 "@iconify/iconify": "^2.0.0-rc.2",
25   - "ant-design-vue": "2.0.0-beta.15",
  25 + "ant-design-vue": "2.0.0-rc.2",
26 26 "apexcharts": "3.22.0",
27 27 "axios": "^0.21.0",
28 28 "crypto-es": "^1.2.6",
... ...
src/hooks/core/useContext.ts
... ... @@ -5,9 +5,8 @@ export const createContext = <T>(
5 5 contextInjectKey: InjectionKey<T> = Symbol(),
6 6 _readonly = true
7 7 ) => {
8   - const state = reactive({
9   - ...context,
10   - });
  8 + const state = reactive({ ...context });
  9 +
11 10 const provideData = _readonly ? readonly(state) : state;
12 11 provide(contextInjectKey, provideData);
13 12 };
... ...
src/hooks/setting/useRootSetting.ts
... ... @@ -12,16 +12,10 @@ type RootSetting = Omit&lt;
12 12 export function useRootSetting() {
13 13 const getRootSetting = computed((): RootSetting => appStore.getProjectConfig);
14 14  
15   - const getOpenPageLoading = computed(() => unref(getRootSetting).openPageLoading);
16   -
17 15 const getPageLoading = computed(() => appStore.getPageLoading);
18 16  
19   - const getOpenRouterTransition = computed(() => unref(getRootSetting).openRouterTransition);
20   -
21 17 const getOpenKeepAlive = computed(() => unref(getRootSetting).openKeepAlive);
22 18  
23   - const getRouterTransition = computed(() => unref(getRootSetting).routerTransition);
24   -
25 19 const getCanEmbedIFramePage = computed(() => unref(getRootSetting).canEmbedIFramePage);
26 20  
27 21 const getPermissionMode = computed(() => unref(getRootSetting).permissionMode);
... ... @@ -65,10 +59,7 @@ export function useRootSetting() {
65 59 getRootSetting,
66 60 getLayoutContentMode,
67 61 getPageLoading,
68   - getOpenPageLoading,
69   - getOpenRouterTransition,
70 62 getOpenKeepAlive,
71   - getRouterTransition,
72 63 getCanEmbedIFramePage,
73 64 getPermissionMode,
74 65 getShowLogo,
... ...
src/hooks/setting/useTransitionSetting.ts 0 → 100644
  1 +import type { TransitionSetting } from '/@/types/config';
  2 +
  3 +import { computed, unref } from 'vue';
  4 +
  5 +import { appStore } from '/@/store/modules/app';
  6 +
  7 +export function useTransitionSetting() {
  8 + const getTransitionSetting = computed(() => appStore.getProjectConfig.transitionSetting);
  9 +
  10 + const getEnableTransition = computed(() => unref(getTransitionSetting).enable);
  11 +
  12 + const getOpenNProgress = computed(() => unref(getTransitionSetting)?.openNProgress);
  13 +
  14 + const getOpenPageLoading = computed(() => {
  15 + return unref(getTransitionSetting)?.openPageLoading && unref(getEnableTransition);
  16 + });
  17 +
  18 + const getBasicTransition = computed(() => unref(getTransitionSetting)?.basicTransition);
  19 +
  20 + function setTransitionSetting(transitionSetting: Partial<TransitionSetting>) {
  21 + appStore.commitProjectConfigState({ transitionSetting });
  22 + }
  23 +
  24 + return {
  25 + setTransitionSetting,
  26 +
  27 + getTransitionSetting,
  28 + getEnableTransition,
  29 + getOpenNProgress,
  30 + getOpenPageLoading,
  31 + getBasicTransition,
  32 + };
  33 +}
... ...
src/layouts/default/content/index.less
... ... @@ -11,11 +11,15 @@
11 11 }
12 12  
13 13 &__loading {
14   - position: fixed;
  14 + position: absolute;
15 15 z-index: @page-loading-z-index;
16 16  
  17 + &.fill {
  18 + background: rgba(240, 242, 245) !important;
  19 + }
  20 +
17 21 > .basic-loading {
18   - margin-bottom: 20%;
  22 + margin-bottom: 30%;
19 23 }
20 24 }
21 25 }
... ...
src/layouts/default/content/index.tsx
1 1 import './index.less';
2 2  
3   -import { defineComponent, unref } from 'vue';
  3 +import { defineComponent, unref, computed } from 'vue';
4 4 import { FullLoading } from '/@/components/Loading/index';
5 5  
6 6 import { RouterView } from 'vue-router';
7 7  
8 8 import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  9 +import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
  10 +import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
9 11  
10 12 export default defineComponent({
11 13 name: 'LayoutContent',
12 14 setup() {
13   - const { getOpenPageLoading, getLayoutContentMode, getPageLoading } = useRootSetting();
  15 + const { getOpenPageLoading } = useTransitionSetting();
  16 + const { getShowMultipleTab } = useMultipleTabSetting();
  17 + const { getLayoutContentMode, getPageLoading } = useRootSetting();
14 18  
  19 + const getLoadingClass = computed(() => {
  20 + return [
  21 + `layout-content__loading`,
  22 + { fill: unref(getShowMultipleTab), hidden: !unref(getPageLoading) },
  23 + ];
  24 + });
15 25 return () => {
16 26 return (
17 27 <div class={['layout-content', unref(getLayoutContentMode)]}>
18   - {unref(getOpenPageLoading) && (
19   - <FullLoading class={[`layout-content__loading`, { hidden: !unref(getPageLoading) }]} />
20   - )}
  28 + {unref(getOpenPageLoading) && <FullLoading class={unref(getLoadingClass)} />}
21 29 <RouterView />
22 30 </div>
23 31 );
... ...
src/layouts/default/multitabs/index.tsx
... ... @@ -24,14 +24,13 @@ export default defineComponent({
24 24 name: 'MultiTabs',
25 25 setup() {
26 26 let isAddAffix = false;
  27 +
27 28 const go = useGo();
  29 +
28 30 const { currentRoute } = useRouter();
29 31 const { activeKeyRef } = useTabs();
30 32  
31   - // 当前tab列表
32   - const getTabsState = computed(() => {
33   - return tabStore.getTabsState;
34   - });
  33 + const getTabsState = computed(() => tabStore.getTabsState);
35 34  
36 35 // If you monitor routing changes, tab switching will be stuck. So setting this method
37 36 watch(
... ... @@ -43,6 +42,7 @@ export default defineComponent({
43 42 }
44 43  
45 44 const lastChangeRoute = unref(tabStore.getLastChangeRouteState);
  45 +
46 46 if (!lastChangeRoute || !userStore.getTokenState) return;
47 47  
48 48 const { path, fullPath } = lastChangeRoute;
... ...
src/layouts/default/setting/SettingDrawer.tsx
... ... @@ -17,6 +17,7 @@ import { useRootSetting } from &#39;/@/hooks/setting/useRootSetting&#39;;
17 17 import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
18 18 import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
19 19 import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
  20 +import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
20 21  
21 22 import { updateColorWeak, updateGrayMode } from '/@/setup/theme';
22 23  
... ... @@ -177,9 +178,6 @@ export default defineComponent({
177 178 setup(_, { attrs }) {
178 179 const {
179 180 getContentMode,
180   - getRouterTransition,
181   - getOpenRouterTransition,
182   - getOpenPageLoading,
183 181 getShowFooter,
184 182 getShowBreadCrumb,
185 183 getShowBreadCrumbIcon,
... ... @@ -190,6 +188,13 @@ export default defineComponent({
190 188 } = useRootSetting();
191 189  
192 190 const {
  191 + getOpenPageLoading,
  192 + getBasicTransition,
  193 + getEnableTransition,
  194 + getOpenNProgress,
  195 + } = useTransitionSetting();
  196 +
  197 + const {
193 198 getIsHorizontal,
194 199 getShowMenu,
195 200 getMenuType,
... ... @@ -447,27 +452,34 @@ export default defineComponent({
447 452 function renderTransition() {
448 453 return (
449 454 <>
450   - {renderSwitchItem('页面切换loading', {
  455 + {renderSwitchItem('顶部进度条', {
  456 + handler: (e) => {
  457 + baseHandler(HandlerEnum.OPEN_PROGRESS, e);
  458 + },
  459 + def: unref(getOpenNProgress),
  460 + })}
  461 + {renderSwitchItem('切换loading', {
451 462 handler: (e) => {
452 463 baseHandler(HandlerEnum.OPEN_PAGE_LOADING, e);
453 464 },
454 465 def: unref(getOpenPageLoading),
  466 + disabled: !unref(getEnableTransition),
455 467 })}
456 468  
457 469 {renderSwitchItem('切换动画', {
458 470 handler: (e) => {
459 471 baseHandler(HandlerEnum.OPEN_ROUTE_TRANSITION, e);
460 472 },
461   - def: unref(getOpenRouterTransition),
  473 + def: unref(getEnableTransition),
462 474 })}
463 475  
464   - {renderSelectItem('路由动画', {
  476 + {renderSelectItem('动画类型', {
465 477 handler: (e) => {
466 478 baseHandler(HandlerEnum.ROUTER_TRANSITION, e);
467 479 },
468   - def: unref(getRouterTransition),
  480 + def: unref(getBasicTransition),
469 481 options: routerTransitionOptions,
470   - disabled: !unref(getOpenRouterTransition),
  482 + disabled: !unref(getEnableTransition),
471 483 })}
472 484 </>
473 485 );
... ...
src/layouts/default/setting/enum.ts
... ... @@ -29,9 +29,6 @@ export enum HandlerEnum {
29 29 TABS_SHOW_QUICK,
30 30 TABS_SHOW,
31 31  
32   - OPEN_PAGE_LOADING,
33   - OPEN_ROUTE_TRANSITION,
34   - ROUTER_TRANSITION,
35 32 LOCK_TIME,
36 33 FULL_CONTENT,
37 34 CONTENT_MODE,
... ... @@ -41,6 +38,11 @@ export enum HandlerEnum {
41 38 COLOR_WEAK,
42 39 SHOW_LOGO,
43 40 SHOW_FOOTER,
  41 +
  42 + ROUTER_TRANSITION,
  43 + OPEN_PROGRESS,
  44 + OPEN_PAGE_LOADING,
  45 + OPEN_ROUTE_TRANSITION,
44 46 }
45 47  
46 48 export const themeOptions = [
... ...
src/layouts/default/setting/handler.ts
... ... @@ -66,17 +66,20 @@ export function handler(event: HandlerEnum, value: any): DeepPartial&lt;ProjectConf
66 66 case HandlerEnum.MENU_SHOW_SEARCH:
67 67 return { menuSetting: { showSearch: value } };
68 68  
69   - // ============root==================
70   -
  69 + // ============transition==================
71 70 case HandlerEnum.OPEN_PAGE_LOADING:
72 71 appStore.commitPageLoadingState(false);
73   - return { openPageLoading: value };
  72 + return { transitionSetting: { openPageLoading: value } };
  73 +
  74 + case HandlerEnum.ROUTER_TRANSITION:
  75 + return { transitionSetting: { basicTransition: value } };
74 76  
75 77 case HandlerEnum.OPEN_ROUTE_TRANSITION:
76   - return { openRouterTransition: value };
  78 + return { transitionSetting: { enable: value } };
77 79  
78   - case HandlerEnum.ROUTER_TRANSITION:
79   - return { routerTransition: value };
  80 + case HandlerEnum.OPEN_PROGRESS:
  81 + return { transitionSetting: { openNProgress: value } };
  82 + // ============root==================
80 83  
81 84 case HandlerEnum.LOCK_TIME:
82 85 return { lockTime: value };
... ...
src/layouts/page/index.tsx
... ... @@ -11,6 +11,7 @@ import { useRootSetting } from &#39;/@/hooks/setting/useRootSetting&#39;;
11 11 import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
12 12  
13 13 import { tabStore } from '/@/store/modules/tab';
  14 +import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
14 15  
15 16 interface DefaultContext {
16 17 Component: FunctionalComponent;
... ... @@ -21,12 +22,9 @@ export default defineComponent({
21 22 name: 'PageLayout',
22 23 setup() {
23 24 const { getShowMenu } = useMenuSetting();
24   - const {
25   - getOpenKeepAlive,
26   - getRouterTransition,
27   - getOpenRouterTransition,
28   - getCanEmbedIFramePage,
29   - } = useRootSetting();
  25 + const { getOpenKeepAlive, getCanEmbedIFramePage } = useRootSetting();
  26 +
  27 + const { getBasicTransition, getEnableTransition } = useTransitionSetting();
30 28  
31 29 const { getMax } = useMultipleTabSetting();
32 30  
... ... @@ -45,7 +43,7 @@ export default defineComponent({
45 43 // No longer show animations that are already in the tab
46 44 const cacheTabs = unref(getCacheTabsRef);
47 45 const isInCache = cacheTabs.includes(route.name as string);
48   - const name = isInCache && route.meta.inTab ? 'fade' : null;
  46 + const name = isInCache && route.meta.inTab ? 'fade-slide' : null;
49 47  
50 48 const renderComp = () => <Component key={route.fullPath} />;
51 49  
... ... @@ -57,10 +55,10 @@ export default defineComponent({
57 55 renderComp()
58 56 );
59 57  
60   - return unref(getOpenRouterTransition) ? (
  58 + return unref(getEnableTransition) ? (
61 59 <Transition
62 60 {...transitionEvent}
63   - name={name || route.meta.transitionName || unref(getRouterTransition)}
  61 + name={name || route.meta.transitionName || unref(getBasicTransition)}
64 62 mode="out-in"
65 63 appear={true}
66 64 >
... ...
src/layouts/page/useTransition.ts
1   -import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  1 +import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
  2 +
2 3 import { appStore } from '/@/store/modules/app';
3 4 import { tryOnUnmounted } from '/@/utils/helper/vueHelper';
4 5  
5 6 export function useTransition() {
6 7 function handleAfterEnter() {
7   - const { getOpenPageLoading, getOpenRouterTransition } = useRootSetting();
8   - if (!getOpenPageLoading.value || !getOpenRouterTransition.value) return;
  8 + const { getOpenPageLoading, getEnableTransition } = useTransitionSetting();
  9 + if (!getOpenPageLoading.value || !getEnableTransition.value) return;
9 10 // Close loading after the route switching animation ends
10 11 appStore.setPageLoadingAction(false);
11 12 }
... ...
src/router/guard/index.ts
... ... @@ -16,7 +16,7 @@ import { tabStore } from &#39;/@/store/modules/tab&#39;;
16 16  
17 17 const globSetting = useGlobSetting();
18 18 export function createGuard(router: Router) {
19   - const { openNProgress, closeMessageOnSwitch, removeAllHttpPending } = useProjectSetting();
  19 + const { closeMessageOnSwitch, removeAllHttpPending } = useProjectSetting();
20 20 let axiosCanceler: AxiosCanceler | null;
21 21 if (removeAllHttpPending) {
22 22 axiosCanceler = new AxiosCanceler();
... ... @@ -44,7 +44,6 @@ export function createGuard(router: Router) {
44 44 Modal.destroyAll();
45 45 notification.destroy();
46 46 }
47   - // TODO Some special interfaces require long connections
48 47 // Switching the route will delete the previous request
49 48 removeAllHttpPending && axiosCanceler!.removeAllPending();
50 49 } catch (error) {
... ... @@ -58,7 +57,6 @@ export function createGuard(router: Router) {
58 57 // change html title
59 58 setTitle(to.meta.title, globSetting.title);
60 59 });
61   -
62   - openNProgress && createProgressGuard(router);
  60 + createProgressGuard(router);
63 61 createPermissionGuard(router);
64 62 }
... ...
src/router/guard/pageLoadingGuard.ts
... ... @@ -3,20 +3,18 @@ import { tabStore } from &#39;/@/store/modules/tab&#39;;
3 3 import { appStore } from '/@/store/modules/app';
4 4 import { userStore } from '/@/store/modules/user';
5 5 import { getParams } from '/@/utils/helper/routeHelper';
  6 +import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
  7 +import { unref } from 'vue';
6 8  
  9 +const { getOpenPageLoading, getEnableTransition } = useTransitionSetting();
7 10 export function createPageLoadingGuard(router: Router) {
8 11 let isFirstLoad = true;
9 12 router.beforeEach(async (to) => {
10   - const {
11   - openKeepAlive,
12   - openRouterTransition,
13   - openPageLoading,
14   - multiTabsSetting: { show } = {},
15   - } = appStore.getProjectConfig;
  13 + const { openKeepAlive, multiTabsSetting: { show } = {} } = appStore.getProjectConfig;
16 14 if (!userStore.getTokenState) {
17 15 return true;
18 16 }
19   - if (!openRouterTransition && openPageLoading) {
  17 + if (!unref(getEnableTransition) && unref(getOpenPageLoading)) {
20 18 appStore.commitPageLoadingState(true);
21 19 return true;
22 20 }
... ... @@ -32,11 +30,10 @@ export function createPageLoadingGuard(router: Router) {
32 30 return true;
33 31 });
34 32 router.afterEach(async (to, from) => {
35   - const { openRouterTransition, openPageLoading } = appStore.getProjectConfig;
36 33 const realToPath = to.path.replace(getParams(to), '');
37 34 const realFormPath = from.path.replace(getParams(from), '');
38 35 if (
39   - (!openRouterTransition && openPageLoading) ||
  36 + (!unref(getEnableTransition) && unref(getOpenPageLoading)) ||
40 37 isFirstLoad ||
41 38 to.meta.afterCloseLoading ||
42 39 realToPath === realFormPath
... ...
src/router/guard/progressGuard.ts
1 1 import type { Router } from 'vue-router';
2 2  
  3 +import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
  4 +
3 5 import NProgress from 'nprogress';
4 6 import 'nprogress/nprogress.css';
  7 +import { unref } from 'vue';
  8 +
  9 +const { getOpenNProgress } = useTransitionSetting();
5 10  
6 11 export function createProgressGuard(router: Router) {
7 12 // NProgress.inc(0.1);
8 13 // NProgress.configure({ easing: 'ease', speed: 200, showSpinner: false });
9 14  
10 15 router.beforeEach(async (to) => {
11   - !to.meta.inTab && NProgress.start();
  16 + !to.meta.inTab && unref(getOpenNProgress) && NProgress.start();
12 17 return true;
13 18 });
14 19  
15 20 router.afterEach(async (to) => {
16   - !to.meta.inTab && NProgress.done();
  21 + !to.meta.inTab && unref(getOpenNProgress) && NProgress.done();
17 22 return true;
18 23 });
19 24 }
... ...
src/settings/projectSetting.ts
... ... @@ -7,155 +7,158 @@ import { isProdMode } from &#39;/@/utils/env&#39;;
7 7  
8 8 // ! You need to clear the browser cache after the change
9 9 const setting: ProjectConfig = {
10   - // locale setting
11   - locale: {
12   - // Locale
13   - lang: 'zh_CN',
14   - // Default locale
15   - fallback: 'zh_CN',
16   - // available Locales
17   - availableLocales: ['zh_CN', 'en'],
18   - },
19   -
20   - // color
21   - // TODO 主题色
22   - themeColor: primaryColor,
23   -
24 10 // Whether to show the configuration button
25 11 showSettingButton: true,
26 12  
27   - // 权限模式
  13 + // Permission mode
28 14 permissionMode: PermissionModeEnum.ROLE,
29 15  
30   - // 网站灰色模式,用于可能悼念的日期开启
  16 + // color
  17 + // TODO Theme color
  18 + themeColor: primaryColor,
  19 +
  20 + // Website gray mode, open for possible mourning dates
31 21 grayMode: false,
32 22  
33   - // 色弱模式
  23 + // Color Weakness Mode
34 24 colorWeak: false,
35 25  
36   - // 是否取消菜单,顶部,多标签页显示, 用于可能内嵌在别的系统内
  26 + // Whether to cancel the menu, the top, the multi-tab page display, for possible embedded in other systems
37 27 fullContent: false,
38 28  
39 29 // content mode
40 30 contentMode: ContentEnum.FULL,
41 31  
42   - // 是否显示logo
  32 + // Whether to display the logo
43 33 showLogo: true,
44 34  
45   - // 是否显示页脚
  35 + // Whether to show footer
46 36 showFooter: true,
47 37  
48   - // 头部配置
  38 + // locale setting
  39 + locale: {
  40 + // Locale
  41 + lang: 'zh_CN',
  42 + // Default locale
  43 + fallback: 'zh_CN',
  44 + // available Locales
  45 + availableLocales: ['zh_CN', 'en'],
  46 + },
  47 +
  48 + // Header configuration
49 49 headerSetting: {
50 50 // header bg color
51 51 bgColor: '#ffffff',
  52 + // Fixed at the top
52 53 fixed: true,
53   - // 是否显示顶部
  54 + // Whether to show top
54 55 show: true,
55 56 // theme
56 57 theme: ThemeEnum.LIGHT,
57   - // 开启锁屏功能
  58 + // Whether to enable the lock screen function
58 59 useLockPage: true,
59   - // 显示刷新按钮
  60 + // Whether to show the refresh button
60 61 showRedo: true,
61   - // 显示全屏按钮
  62 + // Whether to show the full screen button
62 63 showFullScreen: true,
63   - // 显示文档按钮
  64 + // Whether to show the document button
64 65 showDoc: true,
65   - // 显示消息中心按钮
  66 + // Whether to show the notification button
66 67 showNotice: true,
67 68 },
68 69  
69   - // 菜单配置
  70 + // Menu configuration
70 71 menuSetting: {
71 72 // sidebar menu bg color
72 73 bgColor: '#273352',
73   -
  74 + // Whether to fix the left menu
74 75 fixed: true,
75   - // 菜单折叠
  76 + // Menu collapse
76 77 collapsed: false,
77   - // 折叠菜单时候是否显示菜单名
  78 + // Whether to display the menu name when folding the menu
78 79 collapsedShowTitle: false,
79   - // 是否可拖拽
  80 + // Whether it can be dragged
  81 + // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu
80 82 hasDrag: false,
81   - // 是否显示 没有dom
  83 + // Whether to show no dom
82 84 show: true,
83   - // 是否显示 有dom
  85 + // Whether to show dom
84 86 hidden: true,
85   - // 是否显示搜索框
  87 + // Whether to show search box
86 88 showSearch: true,
87   - // 菜单宽度
  89 + // Menu width
88 90 menuWidth: 210,
89   - // 菜单模式
  91 + // Menu mode
90 92 mode: MenuModeEnum.INLINE,
91   - // 菜单类型
  93 + // Menu type
92 94 type: MenuTypeEnum.SIDEBAR,
93   - // 菜单主题
  95 + // Menu theme
94 96 theme: ThemeEnum.DARK,
95   - // 分割菜单
  97 + // Split menu
96 98 split: false,
97   - // 顶部菜单布局
  99 + // Top menu layout
98 100 topMenuAlign: 'center',
99   - // 折叠菜单时候隐藏搜索框
  101 + // Hide the search box when the menu is collapsed
100 102 collapsedShowSearch: false,
101   - // 折叠触发器的位置
  103 + // Fold trigger position
102 104 trigger: TriggerEnum.HEADER,
103   - // 开启手风琴模式,只显示一个菜单
  105 + // Turn on accordion mode, only show a menu
104 106 accordion: true,
105 107 },
106 108  
107   - // 多标签
  109 + // Multi-label
108 110 multiTabsSetting: {
109   - // 开启
  111 + // Turn on
110 112 show: true,
111   - // 开启快速操作
  113 + // Turn on quick actions
112 114 showQuick: true,
113   -
114   - // 标签页缓存最大数量
  115 + // Maximum number of tab cache
115 116 max: 12,
116 117 },
117 118  
118   - // 是否开启KeepAlive缓存 开发时候最好关闭,不然每次都需要清除缓存
  119 + // Transition Setting
  120 + transitionSetting: {
  121 + // Whether to open the page switching animation
  122 + // The disabled state will also disable pageLoadinng
  123 + enable: true,
  124 +
  125 + // Route basic switching animation
  126 + basicTransition: RouterTransitionEnum.FADE_SIDE,
  127 +
  128 + // Whether to open page switching loading
  129 + // Only open when enable=true
  130 + openPageLoading: true,
  131 +
  132 + // Whether to open the top progress bar
  133 + openNProgress: true,
  134 + },
  135 +
  136 + // Whether to enable KeepAlive cache is best to close during development, otherwise the cache needs to be cleared every time
119 137 openKeepAlive: true,
120 138  
121   - // 自动锁屏时间,为0不锁屏。 单位分钟 默认0
  139 + // Automatic screen lock time, 0 does not lock the screen. Unit minute default 0
122 140 lockTime: 0,
123 141  
124   - // 显示面包屑
  142 + // Whether to show breadcrumbs
125 143 showBreadCrumb: true,
126 144  
127   - // 显示面包屑图标
  145 + // Whether to show the breadcrumb icon
128 146 showBreadCrumbIcon: false,
129 147  
130   - // 使用error-handler-plugin
  148 + // Use error-handler-plugin
131 149 useErrorHandle: isProdMode(),
132 150  
133   - // 开启页面切换动画
134   - openRouterTransition: true,
135   -
136   - // 路由切换动画
137   - routerTransition: RouterTransitionEnum.FADE_SIDE,
138   -
139   - // 是否开启登录安全校验
140   - openLoginVerify: true,
141   -
142   - // 是否开启页面切换loading
143   - openPageLoading: true,
144   -
145   - // 是否开启回到顶部
  151 + // Whether to open back to top
146 152 useOpenBackTop: true,
147 153  
148   - // 开启顶部进度条
149   - openNProgress: isProdMode(),
150   -
151   - // 是否可以嵌入iframe页面
  154 + // Is it possible to embed iframe pages
152 155 canEmbedIFramePage: true,
153 156  
154   - // 切换界面的时候是否删除未关闭的message及notify
  157 + // Whether to delete unclosed messages and notify when switching the interface
155 158 closeMessageOnSwitch: true,
156 159  
157   - // 切换界面的时候是否取消已经发送但是未响应的http请求。
158   - // 如果开启,想对单独接口覆盖。可以在单独接口设置
  160 + // Whether to cancel the http request that has been sent but not responded when switching the interface.
  161 + // If it is enabled, I want to overwrite a single interface. Can be set in a separate interface
159 162 removeAllHttpPending: true,
160 163 };
161 164  
... ...
src/types/config.d.ts
... ... @@ -59,6 +59,20 @@ export interface LocaleSetting {
59 59 availableLocales: LocaleType[];
60 60 }
61 61  
  62 +export interface TransitionSetting {
  63 + // Whether to open the page switching animation
  64 + enable: boolean;
  65 +
  66 + // Route basic switching animation
  67 + basicTransition: RouterTransitionEnum;
  68 +
  69 + // Whether to open page switching loading
  70 + openPageLoading: boolean;
  71 +
  72 + // Whether to open the top progress bar
  73 + openNProgress: boolean;
  74 +}
  75 +
62 76 export interface ProjectConfig {
63 77 locale: LocaleSetting;
64 78  
... ... @@ -86,6 +100,9 @@ export interface ProjectConfig {
86 100  
87 101 // 多标签页设置
88 102 multiTabsSetting: MultiTabsSetting;
  103 +
  104 + transitionSetting: TransitionSetting;
  105 +
89 106 // pageLayout是否开启keep-alive
90 107 openKeepAlive: boolean;
91 108  
... ... @@ -97,18 +114,8 @@ export interface ProjectConfig {
97 114 showBreadCrumbIcon: boolean;
98 115 // 使用error-handler-plugin
99 116 useErrorHandle: boolean;
100   - // 开启页面切换动画
101   - openRouterTransition: boolean;
102   - // 路由切换动画
103   - routerTransition: RouterTransitionEnum;
104   - // 是否开启登录安全校验
105   - openLoginVerify: boolean;
106   - // 是否开启页面切换loading
107   - openPageLoading: boolean;
108 117 // 是否开启回到顶部
109 118 useOpenBackTop: boolean;
110   - // 开启顶部进度条
111   - openNProgress: boolean;
112 119 // 是否可以嵌入iframe页面
113 120 canEmbedIFramePage: boolean;
114 121 // 切换界面的时候是否删除未关闭的message及notify
... ...
src/views/sys/redirect/index.vue
... ... @@ -7,10 +7,13 @@
7 7 import { appStore } from '/@/store/modules/app';
8 8  
9 9 import { useRouter } from 'vue-router';
  10 + import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
10 11 export default defineComponent({
11 12 name: 'Redirect',
12 13 setup() {
13 14 const { currentRoute, replace } = useRouter();
  15 + const { getOpenPageLoading, getEnableTransition } = useTransitionSetting();
  16 +
14 17 const { params, query } = unref(currentRoute);
15 18 const { path } = params;
16 19 const _path = Array.isArray(path) ? path.join('/') : path;
... ... @@ -18,8 +21,7 @@
18 21 path: '/' + _path,
19 22 query,
20 23 });
21   - const { openRouterTransition, openPageLoading } = appStore.getProjectConfig;
22   - if (openRouterTransition && openPageLoading) {
  24 + if (unref(getEnableTransition) && unref(getOpenPageLoading)) {
23 25 setTimeout(() => {
24 26 appStore.setPageLoadingAction(false);
25 27 }, 0);
... ...
yarn.lock
... ... @@ -12,24 +12,24 @@
12 12 lodash-es "^4.17.15"
13 13 resize-observer-polyfill "^1.5.1"
14 14  
15   -"@ant-design/colors@^4.0.0":
16   - version "4.0.5"
17   - resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz#d7d100d7545cca8f624954604a6892fc48ba5aae"
18   - integrity sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==
  15 +"@ant-design/colors@^5.0.0":
  16 + version "5.0.0"
  17 + resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-5.0.0.tgz#46b73b4cc6935b35fc8b84555e8e42c8cfc190e6"
  18 + integrity sha512-Pe1rYorgVC1v4f+InDXvIlQH715pO1g7BsOhy/ehX/U6ebPKqojmkYJKU3lF+84Zmvyar7ngZ28hesAa1nWjLg==
19 19 dependencies:
20   - tinycolor2 "^1.4.1"
  20 + "@ctrl/tinycolor" "^3.1.6"
21 21  
22 22 "@ant-design/icons-svg@^4.0.0":
23 23 version "4.1.0"
24 24 resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz#480b025f4b20ef7fe8f47d4a4846e4fee84ea06c"
25 25 integrity sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ==
26 26  
27   -"@ant-design/icons-vue@^5.1.5":
28   - version "5.1.5"
29   - resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-5.1.5.tgz#8e83ba90a29b7ed8b4c2e7282f5908b9b3de519b"
30   - integrity sha512-j1qHhzFCLh4UNoOoVNDFKp4qbzX2bpc/am+rNCqNDeze/TpbQ38nSBSmNPucHuD7koQtAjBW+AIcnToYCgKvpA==
  27 +"@ant-design/icons-vue@^5.1.6":
  28 + version "5.1.6"
  29 + resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-5.1.6.tgz#af15cbf2375d95199e90166adce4c9f6ad1c17f1"
  30 + integrity sha512-1KY04c/0iDM88ICdu6EW2/ZPOrH+FyL0uvR350XnVqvnDiLijdcrRaLzkZgCdBcy7cy5t5+onXKocymndCOdRA==
31 31 dependencies:
32   - "@ant-design/colors" "^4.0.0"
  32 + "@ant-design/colors" "^5.0.0"
33 33 "@ant-design/icons-svg" "^4.0.0"
34 34 "@babel/runtime" "^7.10.4"
35 35 lodash "^4.17.15"
... ... @@ -992,6 +992,11 @@
992 992 resolved "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe"
993 993 integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==
994 994  
  995 +"@ctrl/tinycolor@^3.1.6":
  996 + version "3.1.7"
  997 + resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.1.7.tgz#1585f67629882002a9f8e15a2941c9a4321bf80c"
  998 + integrity sha512-/0C6fjXbCwu22k8mMsKRSAo9zgu61d2p75Or9IuIC0Vu5CWN88t2QHK93LhNnxnqHWf5SFwFU28w9cKfTmnfvg==
  999 +
995 1000 "@eslint/eslintrc@^0.2.1":
996 1001 version "0.2.1"
997 1002 resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c"
... ... @@ -1847,13 +1852,13 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
1847 1852 dependencies:
1848 1853 color-convert "^2.0.1"
1849 1854  
1850   -ant-design-vue@2.0.0-beta.15:
1851   - version "2.0.0-beta.15"
1852   - resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-beta.15.tgz#3c787dabb70a33885d0e751e58f9a5610ed06134"
1853   - integrity sha512-OxZy+ZYU3LauIL4Rhqwy441K/iD++Cit6upnQy5+LVUrX0PSObPqPqMWVpncbAmJJYTEz88gkvgGeYqBdzouWA==
  1855 +ant-design-vue@2.0.0-rc.2:
  1856 + version "2.0.0-rc.2"
  1857 + resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-rc.2.tgz#fd3b4a5a64fccbb53ed488a194317a040de2223e"
  1858 + integrity sha512-XA7X/7HHIveiTh41bZWGfoQ2Rys/rqWknK2zzdHwVnfw9ST3v+ciMKH0Uegyn7m14QL/EdUkC8zGsXpiSXqKNQ==
1854 1859 dependencies:
1855 1860 "@ant-design-vue/use" "^0.0.1-0"
1856   - "@ant-design/icons-vue" "^5.1.5"
  1861 + "@ant-design/icons-vue" "^5.1.6"
1857 1862 "@babel/runtime" "^7.10.5"
1858 1863 "@simonwep/pickr" "~1.7.0"
1859 1864 add-dom-event-listener "^1.0.2"
... ... @@ -7705,11 +7710,6 @@ through@2, &quot;through@&gt;=2.2.7 &lt;3&quot;, through@^2.3.6, through@^2.3.8:
7705 7710 resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
7706 7711 integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
7707 7712  
7708   -tinycolor2@^1.4.1:
7709   - version "1.4.2"
7710   - resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
7711   - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==
7712   -
7713 7713 tmp@^0.0.33:
7714 7714 version "0.0.33"
7715 7715 resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
... ...