diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 400d3688..823a77e5 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -50,14 +50,15 @@ import { closeAppLoading } from "./tools/dom"; }); onMounted(async () => { + closeAppLoading(); if (state.userInfo?.token && !isAdmin.value) { router.push({ path: "/customer" }); } - closeAppLoading(); + if (!state.userInfo?.token) { - router.push({ + return router.push({ path: "/login" }); } diff --git a/frontend/src/config/router.ts b/frontend/src/config/router.ts index c63eef57..37d68646 100644 --- a/frontend/src/config/router.ts +++ b/frontend/src/config/router.ts @@ -1,7 +1,8 @@ import { createRouter, createWebHashHistory, type Router, type RouteRecordRaw } from "vue-router"; import LayoutContainer from "@/views/LayoutContainer.vue"; import { $t as t } from "@/lang/i18n"; -import LoginVue from "@/views/Login.vue"; +import LoginPage from "@/views/Login.vue"; +import InstallPage from "@/views/Install.vue"; import { useAppStateStore } from "@/stores/useAppStateStore"; export interface RouterMetaInfo { @@ -31,6 +32,24 @@ export enum ROLE { } let originRouterConfig: RouterConfig[] = [ + { + path: "/login", + name: "login", + component: LoginPage, + meta: { + permission: ROLE.GUEST, + mainMenu: false + } + }, + { + path: "/init", + name: "init", + component: InstallPage, + meta: { + permission: ROLE.GUEST, + mainMenu: false + } + }, { path: "/", name: t("TXT_CODE_16d71239"), @@ -132,15 +151,7 @@ let originRouterConfig: RouterConfig[] = [ mainMenu: false } }, - { - path: "/login", - name: "login", - component: LoginVue, - meta: { - permission: ROLE.GUEST, - mainMenu: false - } - }, + { path: "/quickstart", name: t("TXT_CODE_2799a1dd"), diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 79b4809e..9cc55dd9 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -12,16 +12,27 @@ import { router } from "./config/router"; import { i18n } from "@/lang/i18n"; import App from "./App.vue"; -import { userInfoApi } from "./services/apis"; +import { panelStatus, userInfoApi } from "./services/apis"; import { useAppStateStore } from "./stores/useAppStateStore"; window.addEventListener("unhandledrejection", function (event) { console.error("Unhandled promise rejection:", event.reason); }); -(async function () { +const { updateUserInfo, state } = useAppStateStore(); + +async function checkPanelStatus() { + const status = await panelStatus().execute(); + state.isInstall = status.value?.isInstall ?? true; + if (!state.isInstall) { + return router.push({ + path: "/init" + }); + } +} + +async function index() { try { - const { updateUserInfo } = useAppStateStore(); const { execute: reqUserInfo } = userInfoApi(); const info = await reqUserInfo(); updateUserInfo(info.value); @@ -34,4 +45,8 @@ window.addEventListener("unhandledrejection", function (event) { app.use(i18n); app.mount("#app"); } -})(); + + await checkPanelStatus(); +} + +index(); diff --git a/frontend/src/services/apis/index.ts b/frontend/src/services/apis/index.ts index 9a932288..23511aac 100644 --- a/frontend/src/services/apis/index.ts +++ b/frontend/src/services/apis/index.ts @@ -5,6 +5,18 @@ import type { IPanelOverviewResponse } from "../../../../common/global"; // 此处 API 接口可以用中文写注释,后期再统一翻译成英语。 +// 面板状态 +export const panelStatus = useDefineApi< + any, + { + isInstall: boolean; + language: string; + } +>({ + url: "/api/auth/status", + method: "GET" +}); + // 用户登录 export const loginUser = useDefineApi< | { diff --git a/frontend/src/stores/useAppStateStore.ts b/frontend/src/stores/useAppStateStore.ts index cafb9783..e3ea53da 100644 --- a/frontend/src/stores/useAppStateStore.ts +++ b/frontend/src/stores/useAppStateStore.ts @@ -6,13 +6,15 @@ import type { BaseUserInfo } from "@/types/user"; interface AppStateInfo { userInfo: BaseUserInfo | null; + isInstall: boolean; } export const useAppStateStore = createGlobalState(() => { const { execute: reqUserInfo } = userInfoApi(); const state: AppStateInfo = reactive({ - userInfo: null + userInfo: null, + isInstall: true }); const cloneState = (): AppStateInfo => { diff --git a/frontend/src/views/Install.vue b/frontend/src/views/Install.vue new file mode 100644 index 00000000..0965e851 --- /dev/null +++ b/frontend/src/views/Install.vue @@ -0,0 +1,114 @@ + + + + +