init project

This commit is contained in:
Timi
2026-04-03 12:02:34 +08:00
parent d4bef26c96
commit 2665acc885
36 changed files with 5725 additions and 218 deletions

132
src/router/index.ts Normal file
View File

@@ -0,0 +1,132 @@
import { createRouter, createWebHistory, type RouteLocationNormalized } from "vue-router";
import RootLayout from "@/layout/RootLayout.vue";
import MainLayout from "@/layout/MainLayout.vue";
import tabs from "@/router/tabs";
import { DEFAULT_BODY_BACKGROUND, useGlobalUIStore } from "@/store/globalUIStore";
import { useSettingStore } from "@/store/settingStore";
import LoginPage from "@/pages/system/LoginPage.vue";
import NotFoundPage from "@/pages/system/NotFoundPage.vue";
import ServerIndexPage from "@/pages/system/ServerIndexPage.vue";
import FileDetailPage from "@/pages/detail/FileDetailPage.vue";
import ServerLogPage from "@/pages/detail/ServerLogPage.vue";
const router = createRouter({
history: createWebHistory("/"),
scrollBehavior(_to, _from, savedPosition) {
if (savedPosition) {
return savedPosition;
}
return {
left: 0,
top: 0
};
},
routes: [
{
path: "/",
name: "RootLayout",
component: RootLayout,
children: [
{
path: "/login",
name: "LoginPage",
meta: {
depth: 1,
ignoreConnectCheck: true,
navBarVisible: false,
tabBarVisible: false,
bodyBackground: "#FFF"
},
component: LoginPage
},
{
path: "/server-index",
name: "ServerIndexPage",
component: ServerIndexPage,
meta: {
depth: 1,
ignoreConnectCheck: true,
navBarVisible: false,
tabBarVisible: false,
bodyBackground: "#FFF"
}
},
{
path: "/",
name: "MainLayout",
component: MainLayout,
meta: {
depth: 2,
bodyBackground: "#FFF"
},
children: [
...tabs,
{
path: "/files/detail/:id",
name: "FileDetailPage",
meta: {
depth: 3,
navBarVisible: true,
navBarCanBack: true,
navBarTitle: "文件详情",
tabBarVisible: false
},
component: FileDetailPage
},
{
path: "/server/logs",
name: "ServerLogPage",
meta: {
depth: 3,
navBarVisible: true,
navBarCanBack: true,
navBarTitle: "服务日志",
tabBarVisible: false
},
component: ServerLogPage
}
]
}
]
},
{
path: "/:pathMatch(.*)*",
name: "NotFoundPage",
meta: {
depth: 1,
ignoreConnectCheck: true,
navBarVisible: false,
tabBarVisible: false
},
component: NotFoundPage
}
]
});
router.beforeEach((to: RouteLocationNormalized) => {
const settingStore = useSettingStore();
if (to.meta.ignoreConnectCheck) {
return true;
}
if (settingStore.hasConnectConfig) {
return true;
}
return {
name: "ServerIndexPage",
query: {
redirect: to.fullPath
}
};
});
router.afterEach((to: RouteLocationNormalized) => {
const globalUIStore = useGlobalUIStore();
const targetBackground = typeof to.meta.bodyBackground === "string" ? to.meta.bodyBackground : DEFAULT_BODY_BACKGROUND;
globalUIStore.setBodyBackground(targetBackground);
});
export default router;

46
src/router/tabs.ts Normal file
View File

@@ -0,0 +1,46 @@
import type { RouteRecordRaw } from "vue-router";
import FilePage from "@/pages/tabs/FilePage.vue";
import ServerStatusPage from "@/pages/tabs/ServerStatusPage.vue";
import SettingsPage from "@/pages/tabs/SettingsPage.vue";
const tabs: RouteRecordRaw[] = [
{
path: "/",
name: "FilePage",
meta: {
depth: 2,
navBarVisible: true,
navBarTitle: "文件",
tabBarVisible: true,
tabBarPadding: true
},
component: FilePage
},
{
path: "/server",
name: "ServerStatusPage",
meta: {
depth: 2,
navBarVisible: true,
navBarTitle: "状态",
tabBarVisible: true,
tabBarPadding: true
},
component: ServerStatusPage
},
{
path: "/settings",
name: "SettingsPage",
meta: {
depth: 2,
navBarVisible: true,
navBarTitle: "设置",
tabBarVisible: true,
tabBarPadding: true,
bodyBackground: "var(--app-bg)"
},
component: SettingsPage
}
];
export default tabs;