Commit 41d79008c55c96a5aeda5bb2a23d70575fc41333
1 parent
0692b479
refactor: refactor setting
Showing
20 changed files
with
239 additions
and
174 deletions
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
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< |
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 '/@/hooks/setting/useRootSetting'; |
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<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 '/@/hooks/setting/useRootSetting'; |
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 '/@/store/modules/tab'; |
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 '/@/store/modules/tab'; |
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 '/@/utils/env'; |
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, "through@>=2.2.7 <3", 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" | ... | ... |