2024-08-23 12:42:32 +00:00
|
|
|
import { createRouter, createWebHistory, createWebHashHistory } from "vue-router";
|
|
|
|
import Login from "../views/Login.vue";
|
|
|
|
|
|
|
|
import { isAuthenticated } from "./authGuards";
|
|
|
|
import { loadAccountData } from "./accountGuard";
|
2024-08-25 11:37:23 +00:00
|
|
|
import { isSetup } from "./setupGuard";
|
2024-09-01 17:19:48 +00:00
|
|
|
import { abilityAndNavUpdate } from "./adminGuard";
|
|
|
|
import type { PermissionType, PermissionSection, PermissionModule } from "../types/permissionTypes";
|
2024-08-22 09:48:04 +00:00
|
|
|
|
|
|
|
const router = createRouter({
|
|
|
|
history: createWebHistory(import.meta.env.BASE_URL),
|
|
|
|
routes: [
|
|
|
|
{
|
|
|
|
path: "/",
|
2024-08-23 12:42:32 +00:00
|
|
|
redirect: { name: "admin" },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "/login",
|
|
|
|
name: "login",
|
|
|
|
component: Login,
|
|
|
|
},
|
2024-08-25 11:37:23 +00:00
|
|
|
{
|
|
|
|
path: "/setup",
|
|
|
|
name: "setup",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
beforeEnter: [isSetup],
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "setup-create",
|
|
|
|
component: () => import("../views/setup/Setup.vue"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "verify",
|
|
|
|
name: "setup-verify",
|
|
|
|
component: () => import("../views/setup/Verify.vue"),
|
|
|
|
props: (route) => ({ mail: route.query.mail, token: route.query.token }),
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
2024-08-23 12:42:32 +00:00
|
|
|
{
|
|
|
|
path: "/admin",
|
|
|
|
name: "admin",
|
|
|
|
component: () => import("../views/admin/View.vue"),
|
|
|
|
beforeEnter: [isAuthenticated],
|
2024-09-01 17:19:48 +00:00
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "admin-default",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "club",
|
|
|
|
name: "admin-club",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
meta: { type: "read", section: "club" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "admin-club-default",
|
|
|
|
component: () => import("../views/admin/ViewSelect.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "club" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "members",
|
|
|
|
name: "admin-club-members",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "club", module: "members" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "calendar",
|
|
|
|
name: "admin-club-calendar",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "club", module: "calendar" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "newsletter",
|
|
|
|
name: "admin-club-newsletter",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "club", module: "newsletter" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "protocol",
|
|
|
|
name: "admin-club-protocol",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "club", module: "protocoll" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "settings",
|
|
|
|
name: "admin-settings",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
meta: { type: "read", section: "settings" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "admin-settings-default",
|
|
|
|
component: () => import("../views/admin/ViewSelect.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "settings" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "qualification",
|
|
|
|
name: "admin-settings-qualification",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "settings", module: "qualification" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "award",
|
|
|
|
name: "admin-settings-award",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "settings", module: "award" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "executive-position",
|
|
|
|
name: "admin-settings-executive_position",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "settings", module: "executive_position" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "communication",
|
|
|
|
name: "admin-settings-communication",
|
|
|
|
component: () => import("../views/admin/members/Overview.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "settings", module: "communication" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "user",
|
|
|
|
name: "admin-user",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
meta: { type: "read", section: "user" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "admin-user-default",
|
|
|
|
component: () => import("../views/admin/ViewSelect.vue"),
|
2024-09-02 13:57:03 +00:00
|
|
|
meta: { type: "read", section: "user" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "user",
|
2024-09-02 13:57:03 +00:00
|
|
|
name: "admin-user-user-route",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
meta: { type: "read", section: "user", module: "user" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "admin-user-user",
|
|
|
|
component: () => import("../views/admin/user/User.vue"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: ":id/edit",
|
|
|
|
name: "admin-user-user-edit",
|
|
|
|
component: () => import("../views/admin/user/UserEdit.vue"),
|
|
|
|
meta: { type: "update", section: "user", module: "user" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
props: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: ":id/permission",
|
|
|
|
name: "admin-user-user-permission",
|
|
|
|
component: () => import("../views/admin/user/UserEditPermission.vue"),
|
|
|
|
meta: { type: "update", section: "user", module: "user" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
props: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: ":id/roles",
|
|
|
|
name: "admin-user-user-roles",
|
|
|
|
component: () => import("../views/admin/user/UserEditRoles.vue"),
|
|
|
|
meta: { type: "update", section: "user", module: "user" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
props: true,
|
|
|
|
},
|
|
|
|
],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: "role",
|
2024-09-02 13:57:03 +00:00
|
|
|
name: "admin-user-role-route",
|
|
|
|
component: () => import("../views/RouterView.vue"),
|
|
|
|
meta: { type: "read", section: "user", module: "role" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
path: "",
|
|
|
|
name: "admin-user-role",
|
|
|
|
component: () => import("../views/admin/user/Role.vue"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: ":id/edit",
|
|
|
|
name: "admin-user-role-edit",
|
|
|
|
component: () => import("../views/admin/user/RoleEdit.vue"),
|
|
|
|
meta: { type: "update", section: "user", module: "role" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
props: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: ":id/permission",
|
|
|
|
name: "admin-user-role-permission",
|
|
|
|
component: () => import("../views/admin/user/RoleEditPermission.vue"),
|
|
|
|
meta: { type: "update", section: "user", module: "role" },
|
|
|
|
beforeEnter: [abilityAndNavUpdate],
|
|
|
|
props: true,
|
|
|
|
},
|
|
|
|
],
|
2024-09-01 17:19:48 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: ":pathMatch(.*)*",
|
|
|
|
name: "admin-404",
|
|
|
|
component: () => import("../views/notFound.vue"),
|
|
|
|
},
|
|
|
|
],
|
2024-08-23 12:42:32 +00:00
|
|
|
},
|
2024-08-26 11:46:54 +00:00
|
|
|
{
|
|
|
|
path: "/nopermissions",
|
|
|
|
name: "nopermissions",
|
|
|
|
component: () => import("../views/NoPermission.vue"),
|
|
|
|
},
|
2024-08-23 12:42:32 +00:00
|
|
|
{
|
|
|
|
path: "/:pathMatch(.*)*",
|
|
|
|
name: "404",
|
|
|
|
component: () => import("../views/notFound.vue"),
|
2024-08-22 09:48:04 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
});
|
|
|
|
|
|
|
|
export default router;
|
2024-09-01 17:19:48 +00:00
|
|
|
|
|
|
|
declare module "vue-router" {
|
|
|
|
interface RouteMeta {
|
|
|
|
type?: PermissionType | "admin";
|
|
|
|
section?: PermissionSection;
|
|
|
|
module?: PermissionModule;
|
|
|
|
}
|
|
|
|
}
|