174 lines
5.2 KiB
TypeScript
174 lines
5.2 KiB
TypeScript
import { createRouter, createWebHistory, } from "vue-router";
|
||
import AuthContainer from '@/views/AuthContainer.vue';
|
||
import MainContainer from '@/views/MainContainer.vue';
|
||
import Login from '@/views/Login/Login.vue';
|
||
import Files from '@/views/Files/Files.vue';
|
||
import Upload from '@/views/Upload/index.vue';
|
||
import Map from '@/views/Discover/Map/Map.vue';
|
||
import Conformance from '@/views/Discover/Conformance/index.vue';
|
||
import Performance from '@/views/Discover/Performance/index.vue';
|
||
import CompareDashboard from '@/views/Compare/Dashboard/Compare.vue';
|
||
import MapCompare from '@/views/Compare/MapCompare.vue';
|
||
import AccountAdmin from '@/views/AccountManagement/AccountAdmin/AccountAdmin.vue';
|
||
import MyAccount from '@/views/AccountManagement/MyAccount.vue';
|
||
import MemberArea from '@/views/MemberArea/index.vue';
|
||
import NotFound404 from '@/views/NotFound404.vue';
|
||
|
||
const routes = [
|
||
{
|
||
path: '/', // 預設進入路由
|
||
redirect: '/files', //重定向
|
||
},
|
||
{
|
||
path: '/',
|
||
name: "AuthContainer",
|
||
component: AuthContainer,
|
||
children: [
|
||
{
|
||
path: "/login",
|
||
name: "Login",
|
||
component: Login,
|
||
},
|
||
]
|
||
},
|
||
{
|
||
path: "/",
|
||
name: "MainContainer",
|
||
component: MainContainer,
|
||
meta: {
|
||
title: "MainContainer",
|
||
requiresAuth: true
|
||
},
|
||
children: [
|
||
{
|
||
path: "/member-area",
|
||
name: "MemberArea",
|
||
component: MemberArea,
|
||
},
|
||
{
|
||
path: "/files",
|
||
name: "Files",
|
||
component: Files,
|
||
},
|
||
{
|
||
path: "/account",
|
||
name: "Account Management",
|
||
children: [
|
||
{
|
||
path: "/account-admin",
|
||
name: "AcctAdmin",
|
||
component: AccountAdmin,
|
||
},
|
||
]
|
||
},{
|
||
path: "/my-account",
|
||
name: "My Account",
|
||
component: MyAccount,
|
||
},
|
||
{
|
||
path: "/upload", // router.push({ replace: true }) 路徑不添進歷史紀錄
|
||
name: "Upload",
|
||
component: Upload
|
||
},
|
||
{
|
||
path: "/discover",
|
||
name: "Discover",
|
||
children: [
|
||
{
|
||
// type: log | filter,參數會有以上任一。
|
||
// fileId: log_id | filter_id,參數會有以上任一。
|
||
path: "/discover/:type/:fileId/map",
|
||
name: "Map",
|
||
component: Map,
|
||
},
|
||
{
|
||
// type: log | filter,參數會有以上任一。
|
||
// fileId: log_id | filter_id,參數會有以上任一。
|
||
path: "/discover/:type/:fileId/conformance",
|
||
name: "Conformance",
|
||
component: Conformance,
|
||
},
|
||
{
|
||
// type: log | filter,參數會有以上任一。
|
||
// fileId: log_id | filter_id,參數會有以上任一。
|
||
path: "/discover/:type/:fileId/performance",
|
||
name: "Performance",
|
||
component: Performance,
|
||
},
|
||
{
|
||
// type: log | filter,參數會有以上任一。
|
||
// fileId: check_id,透過 `/log-checks/{check_id}` 取得 parent data
|
||
path: "/discover/conformance/:type/:fileId/map",
|
||
name: "CheckMap",
|
||
component: Map,
|
||
meta: {
|
||
file: {}, // parent log or parent filter
|
||
}
|
||
},
|
||
{
|
||
// type: log | filter,參數會有以上任一。
|
||
// fileId: check_id,透過 `/log-checks/{check_id}` 取得 parent data
|
||
path: "/discover/conformance/:type/:fileId/conformance",
|
||
name: "CheckConformance",
|
||
component: Conformance,
|
||
meta: {
|
||
file: {}, // parent log or parent filter
|
||
}
|
||
},
|
||
{
|
||
// type: log | filter,參數會有以上任一。
|
||
// fileId: check_id,透過 `/log-checks/{check_id}` 取得 parent data
|
||
path: "/discover/conformance/:type/:fileId/performance",
|
||
name: "CheckPerformance",
|
||
component: Performance,
|
||
meta: {
|
||
file: {}, // parent log or parent filter
|
||
}
|
||
},
|
||
]
|
||
},
|
||
{
|
||
path: "/compare",
|
||
name: "Compare",
|
||
children: [
|
||
{
|
||
path: "/compare/dashboard/:primaryType/:primaryId/:secondaryType/:secondaryId",
|
||
name: "CompareDashboard",
|
||
component: CompareDashboard,
|
||
}, {
|
||
path: "/compare/map/:primaryType/:primaryId/:secondaryType/:secondaryId",
|
||
name: "MapCompare",
|
||
component: MapCompare,
|
||
}
|
||
]
|
||
},
|
||
]
|
||
},
|
||
{
|
||
path: "/:pathMatch(.*)*",
|
||
name: "NotFound404",
|
||
component: NotFound404,
|
||
},
|
||
];
|
||
|
||
const base_url = import.meta.env.BASE_URL;
|
||
const router = createRouter({
|
||
history: createWebHistory(base_url), //(/)
|
||
// history: createWebHashHistory(base_url), // (/#)
|
||
routes
|
||
});
|
||
|
||
// 全域性路由守衛
|
||
router.beforeEach((to, from) => {
|
||
// to: Route: 即將要進入的目標 路由物件
|
||
// from: Route: 當前導航正要離開的路由
|
||
|
||
// 當路由到 login 時,已登入則跳轉至 Files
|
||
if (to.name === 'Login') {
|
||
const isLoggedIn = document.cookie.split(';').some(c => c.trim().startsWith('isLuciaLoggedIn='));
|
||
if (isLoggedIn) return { name: 'Files' };
|
||
}
|
||
});
|
||
|
||
export default router;
|