refactor: modify the default homepage path loaded from the preference… (#6099)

* refactor: modify the default homepage path loaded from the preferences.ts

Signed-off-by: aonoa <1991849113@qq.com>

* refactor: modify the default homepage path loaded from the preferences.ts

Signed-off-by: aonoa <1991849113@qq.com>

---------

Signed-off-by: aonoa <1991849113@qq.com>
This commit is contained in:
aonoa 2025-05-03 16:03:08 +08:00 committed by GitHub
parent f1af9f8f6e
commit 41152d1722
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 63 additions and 42 deletions

View File

@ -1,6 +1,6 @@
import type { Router } from 'vue-router'; import type { Router } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences'; import { preferences } from '@vben/preferences';
import { useAccessStore, useUserStore } from '@vben/stores'; import { useAccessStore, useUserStore } from '@vben/stores';
import { startProgress, stopProgress } from '@vben/utils'; import { startProgress, stopProgress } from '@vben/utils';
@ -56,7 +56,7 @@ function setupAccessGuard(router: Router) {
return decodeURIComponent( return decodeURIComponent(
(to.query?.redirect as string) || (to.query?.redirect as string) ||
userStore.userInfo?.homePath || userStore.userInfo?.homePath ||
DEFAULT_HOME_PATH, preferences.app.defaultHomePath,
); );
} }
return true; return true;
@ -75,7 +75,7 @@ function setupAccessGuard(router: Router) {
path: LOGIN_PATH, path: LOGIN_PATH,
// 如不需要,直接删除 query // 如不需要,直接删除 query
query: query:
to.fullPath === DEFAULT_HOME_PATH to.fullPath === preferences.app.defaultHomePath
? {} ? {}
: { redirect: encodeURIComponent(to.fullPath) }, : { redirect: encodeURIComponent(to.fullPath) },
// 携带当前跳转的页面,登录后重新跳转该页面 // 携带当前跳转的页面,登录后重新跳转该页面
@ -108,8 +108,8 @@ function setupAccessGuard(router: Router) {
accessStore.setAccessRoutes(accessibleRoutes); accessStore.setAccessRoutes(accessibleRoutes);
accessStore.setIsAccessChecked(true); accessStore.setIsAccessChecked(true);
const redirectPath = (from.query.redirect ?? const redirectPath = (from.query.redirect ??
(to.path === DEFAULT_HOME_PATH (to.path === preferences.app.defaultHomePath
? userInfo.homePath || DEFAULT_HOME_PATH ? userInfo.homePath || preferences.app.defaultHomePath
: to.fullPath)) as string; : to.fullPath)) as string;
return { return {

View File

@ -1,6 +1,7 @@
import type { RouteRecordRaw } from 'vue-router'; import type { RouteRecordRaw } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales'; import { $t } from '#/locales';
@ -34,7 +35,7 @@ const coreRoutes: RouteRecordRaw[] = [
}, },
name: 'Root', name: 'Root',
path: '/', path: '/',
redirect: DEFAULT_HOME_PATH, redirect: preferences.app.defaultHomePath,
children: [], children: [],
}, },
{ {

View File

@ -3,7 +3,8 @@ import type { Recordable, UserInfo } from '@vben/types';
import { ref } from 'vue'; import { ref } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores'; import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
import { notification } from 'ant-design-vue'; import { notification } from 'ant-design-vue';
@ -54,7 +55,9 @@ export const useAuthStore = defineStore('auth', () => {
} else { } else {
onSuccess onSuccess
? await onSuccess?.() ? await onSuccess?.()
: await router.push(userInfo.homePath || DEFAULT_HOME_PATH); : await router.push(
userInfo.homePath || preferences.app.defaultHomePath,
);
} }
if (userInfo?.realName) { if (userInfo?.realName) {

View File

@ -1,6 +1,6 @@
import type { Router } from 'vue-router'; import type { Router } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences'; import { preferences } from '@vben/preferences';
import { useAccessStore, useUserStore } from '@vben/stores'; import { useAccessStore, useUserStore } from '@vben/stores';
import { startProgress, stopProgress } from '@vben/utils'; import { startProgress, stopProgress } from '@vben/utils';
@ -56,7 +56,7 @@ function setupAccessGuard(router: Router) {
return decodeURIComponent( return decodeURIComponent(
(to.query?.redirect as string) || (to.query?.redirect as string) ||
userStore.userInfo?.homePath || userStore.userInfo?.homePath ||
DEFAULT_HOME_PATH, preferences.app.defaultHomePath,
); );
} }
return true; return true;
@ -75,7 +75,7 @@ function setupAccessGuard(router: Router) {
path: LOGIN_PATH, path: LOGIN_PATH,
// 如不需要,直接删除 query // 如不需要,直接删除 query
query: query:
to.fullPath === DEFAULT_HOME_PATH to.fullPath === preferences.app.defaultHomePath
? {} ? {}
: { redirect: encodeURIComponent(to.fullPath) }, : { redirect: encodeURIComponent(to.fullPath) },
// 携带当前跳转的页面,登录后重新跳转该页面 // 携带当前跳转的页面,登录后重新跳转该页面
@ -108,8 +108,8 @@ function setupAccessGuard(router: Router) {
accessStore.setAccessRoutes(accessibleRoutes); accessStore.setAccessRoutes(accessibleRoutes);
accessStore.setIsAccessChecked(true); accessStore.setIsAccessChecked(true);
const redirectPath = (from.query.redirect ?? const redirectPath = (from.query.redirect ??
(to.path === DEFAULT_HOME_PATH (to.path === preferences.app.defaultHomePath
? userInfo.homePath || DEFAULT_HOME_PATH ? userInfo.homePath || preferences.app.defaultHomePath
: to.fullPath)) as string; : to.fullPath)) as string;
return { return {

View File

@ -1,6 +1,7 @@
import type { RouteRecordRaw } from 'vue-router'; import type { RouteRecordRaw } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales'; import { $t } from '#/locales';
@ -34,7 +35,7 @@ const coreRoutes: RouteRecordRaw[] = [
}, },
name: 'Root', name: 'Root',
path: '/', path: '/',
redirect: DEFAULT_HOME_PATH, redirect: preferences.app.defaultHomePath,
children: [], children: [],
}, },
{ {

View File

@ -3,7 +3,8 @@ import type { Recordable, UserInfo } from '@vben/types';
import { ref } from 'vue'; import { ref } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores'; import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
import { ElNotification } from 'element-plus'; import { ElNotification } from 'element-plus';
@ -55,7 +56,9 @@ export const useAuthStore = defineStore('auth', () => {
} else { } else {
onSuccess onSuccess
? await onSuccess?.() ? await onSuccess?.()
: await router.push(userInfo.homePath || DEFAULT_HOME_PATH); : await router.push(
userInfo.homePath || preferences.app.defaultHomePath,
);
} }
if (userInfo?.realName) { if (userInfo?.realName) {

View File

@ -1,6 +1,6 @@
import type { Router } from 'vue-router'; import type { Router } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences'; import { preferences } from '@vben/preferences';
import { useAccessStore, useUserStore } from '@vben/stores'; import { useAccessStore, useUserStore } from '@vben/stores';
import { startProgress, stopProgress } from '@vben/utils'; import { startProgress, stopProgress } from '@vben/utils';
@ -56,7 +56,7 @@ function setupAccessGuard(router: Router) {
return decodeURIComponent( return decodeURIComponent(
(to.query?.redirect as string) || (to.query?.redirect as string) ||
userStore.userInfo?.homePath || userStore.userInfo?.homePath ||
DEFAULT_HOME_PATH, preferences.app.defaultHomePath,
); );
} }
return true; return true;
@ -75,7 +75,7 @@ function setupAccessGuard(router: Router) {
path: LOGIN_PATH, path: LOGIN_PATH,
// 如不需要,直接删除 query // 如不需要,直接删除 query
query: query:
to.fullPath === DEFAULT_HOME_PATH to.fullPath === preferences.app.defaultHomePath
? {} ? {}
: { redirect: encodeURIComponent(to.fullPath) }, : { redirect: encodeURIComponent(to.fullPath) },
// 携带当前跳转的页面,登录后重新跳转该页面 // 携带当前跳转的页面,登录后重新跳转该页面
@ -107,8 +107,8 @@ function setupAccessGuard(router: Router) {
accessStore.setAccessRoutes(accessibleRoutes); accessStore.setAccessRoutes(accessibleRoutes);
accessStore.setIsAccessChecked(true); accessStore.setIsAccessChecked(true);
const redirectPath = (from.query.redirect ?? const redirectPath = (from.query.redirect ??
(to.path === DEFAULT_HOME_PATH (to.path === preferences.app.defaultHomePath
? userInfo.homePath || DEFAULT_HOME_PATH ? userInfo.homePath || preferences.app.defaultHomePath
: to.fullPath)) as string; : to.fullPath)) as string;
return { return {

View File

@ -1,6 +1,7 @@
import type { RouteRecordRaw } from 'vue-router'; import type { RouteRecordRaw } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales'; import { $t } from '#/locales';
@ -34,7 +35,7 @@ const coreRoutes: RouteRecordRaw[] = [
}, },
name: 'Root', name: 'Root',
path: '/', path: '/',
redirect: DEFAULT_HOME_PATH, redirect: preferences.app.defaultHomePath,
children: [], children: [],
}, },
{ {

View File

@ -3,7 +3,8 @@ import type { Recordable, UserInfo } from '@vben/types';
import { ref } from 'vue'; import { ref } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores'; import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
@ -55,7 +56,9 @@ export const useAuthStore = defineStore('auth', () => {
} else { } else {
onSuccess onSuccess
? await onSuccess?.() ? await onSuccess?.()
: await router.push(userInfo.homePath || DEFAULT_HOME_PATH); : await router.push(
userInfo.homePath || preferences.app.defaultHomePath,
);
} }
if (userInfo?.realName) { if (userInfo?.realName) {

View File

@ -164,6 +164,7 @@ const defaultPreferences: Preferences = {
contentCompact: 'wide', contentCompact: 'wide',
defaultAvatar: defaultAvatar:
'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp', 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',
defaultHomePath: '/analytics',
dynamicTitle: true, dynamicTitle: true,
enableCheckUpdates: true, enableCheckUpdates: true,
enablePreferences: true, enablePreferences: true,
@ -289,6 +290,8 @@ interface AppPreferences {
contentCompact: ContentCompactType; contentCompact: ContentCompactType;
// /** Default application avatar */ // /** Default application avatar */
defaultAvatar: string; defaultAvatar: string;
/** Default homepage path */
defaultHomePath: string;
// /** Enable dynamic title */ // /** Enable dynamic title */
dynamicTitle: boolean; dynamicTitle: boolean;
/** Whether to enable update checks */ /** Whether to enable update checks */

View File

@ -187,6 +187,7 @@ const defaultPreferences: Preferences = {
contentCompact: 'wide', contentCompact: 'wide',
defaultAvatar: defaultAvatar:
'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp', 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',
defaultHomePath: '/analytics',
dynamicTitle: true, dynamicTitle: true,
enableCheckUpdates: true, enableCheckUpdates: true,
enablePreferences: true, enablePreferences: true,
@ -312,6 +313,8 @@ interface AppPreferences {
contentCompact: ContentCompactType; contentCompact: ContentCompactType;
// /** 应用默认头像 */ // /** 应用默认头像 */
defaultAvatar: string; defaultAvatar: string;
/** 默认首页地址 */
defaultHomePath: string;
// /** 开启动态标题 */ // /** 开启动态标题 */
dynamicTitle: boolean; dynamicTitle: boolean;
/** 是否开启检查更新 */ /** 是否开启检查更新 */

View File

@ -11,6 +11,7 @@ exports[`defaultPreferences immutability test > should not modify the config obj
"compact": false, "compact": false,
"contentCompact": "wide", "contentCompact": "wide",
"defaultAvatar": "https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp", "defaultAvatar": "https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp",
"defaultHomePath": "/analytics",
"dynamicTitle": true, "dynamicTitle": true,
"enableCheckUpdates": true, "enableCheckUpdates": true,
"enablePreferences": true, "enablePreferences": true,

View File

@ -11,6 +11,7 @@ const defaultPreferences: Preferences = {
contentCompact: 'wide', contentCompact: 'wide',
defaultAvatar: defaultAvatar:
'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp', 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',
defaultHomePath: '/analytics',
dynamicTitle: true, dynamicTitle: true,
enableCheckUpdates: true, enableCheckUpdates: true,
enablePreferences: true, enablePreferences: true,

View File

@ -35,6 +35,8 @@ interface AppPreferences {
contentCompact: ContentCompactType; contentCompact: ContentCompactType;
// /** 应用默认头像 */ // /** 应用默认头像 */
defaultAvatar: string; defaultAvatar: string;
/** 默认首页地址 */
defaultHomePath: string;
// /** 开启动态标题 */ // /** 开启动态标题 */
dynamicTitle: boolean; dynamicTitle: boolean;
/** 是否开启检查更新 */ /** 是否开启检查更新 */

View File

@ -15,5 +15,5 @@ pnpm add @vben/constants
### 使用 ### 使用
```ts ```ts
import { DEFAULT_HOME_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
``` ```

View File

@ -3,11 +3,6 @@
*/ */
export const LOGIN_PATH = '/auth/login'; export const LOGIN_PATH = '/auth/login';
/**
* @zh_CN
*/
export const DEFAULT_HOME_PATH = '/analytics';
export interface LanguageOption { export interface LanguageOption {
label: string; label: string;
value: 'en-US' | 'zh-CN'; value: 'en-US' | 'zh-CN';

View File

@ -1,6 +1,6 @@
import type { Router } from 'vue-router'; import type { Router } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences'; import { preferences } from '@vben/preferences';
import { useAccessStore, useUserStore } from '@vben/stores'; import { useAccessStore, useUserStore } from '@vben/stores';
import { startProgress, stopProgress } from '@vben/utils'; import { startProgress, stopProgress } from '@vben/utils';
@ -54,7 +54,7 @@ function setupAccessGuard(router: Router) {
return decodeURIComponent( return decodeURIComponent(
(to.query?.redirect as string) || (to.query?.redirect as string) ||
userStore.userInfo?.homePath || userStore.userInfo?.homePath ||
DEFAULT_HOME_PATH, preferences.app.defaultHomePath,
); );
} }
return true; return true;
@ -73,7 +73,7 @@ function setupAccessGuard(router: Router) {
path: LOGIN_PATH, path: LOGIN_PATH,
// 如不需要,直接删除 query // 如不需要,直接删除 query
query: query:
to.fullPath === DEFAULT_HOME_PATH to.fullPath === preferences.app.defaultHomePath
? {} ? {}
: { redirect: encodeURIComponent(to.fullPath) }, : { redirect: encodeURIComponent(to.fullPath) },
// 携带当前跳转的页面,登录后重新跳转该页面 // 携带当前跳转的页面,登录后重新跳转该页面
@ -106,8 +106,8 @@ function setupAccessGuard(router: Router) {
accessStore.setAccessRoutes(accessibleRoutes); accessStore.setAccessRoutes(accessibleRoutes);
accessStore.setIsAccessChecked(true); accessStore.setIsAccessChecked(true);
const redirectPath = (from.query.redirect ?? const redirectPath = (from.query.redirect ??
(to.path === DEFAULT_HOME_PATH (to.path === preferences.app.defaultHomePath
? userInfo.homePath || DEFAULT_HOME_PATH ? userInfo.homePath || preferences.app.defaultHomePath
: to.fullPath)) as string; : to.fullPath)) as string;
return { return {

View File

@ -1,6 +1,7 @@
import type { RouteRecordRaw } from 'vue-router'; import type { RouteRecordRaw } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales'; import { $t } from '#/locales';
@ -34,7 +35,7 @@ const coreRoutes: RouteRecordRaw[] = [
}, },
name: 'Root', name: 'Root',
path: '/', path: '/',
redirect: DEFAULT_HOME_PATH, redirect: preferences.app.defaultHomePath,
children: [], children: [],
}, },
{ {

View File

@ -3,7 +3,8 @@ import type { Recordable, UserInfo } from '@vben/types';
import { ref } from 'vue'; import { ref } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; import { LOGIN_PATH } from '@vben/constants';
import { preferences } from '@vben/preferences';
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores'; import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
import { notification } from 'ant-design-vue'; import { notification } from 'ant-design-vue';
@ -55,7 +56,9 @@ export const useAuthStore = defineStore('auth', () => {
} else { } else {
onSuccess onSuccess
? await onSuccess?.() ? await onSuccess?.()
: await router.push(userInfo.homePath || DEFAULT_HOME_PATH); : await router.push(
userInfo.homePath || preferences.app.defaultHomePath,
);
} }
if (userInfo?.realName) { if (userInfo?.realName) {