ff-admin/src/router/index.ts

764 lines
29 KiB
TypeScript
Raw Normal View History

2024-09-18 10:38:57 +02:00
import { createRouter, createWebHistory } from "vue-router";
2024-09-17 16:44:02 +02:00
import Login from "@/views/Login.vue";
2024-08-23 14:42:32 +02:00
2024-11-21 15:58:58 +01:00
import { isAuthenticated } from "./authGuard";
2024-08-23 14:42:32 +02:00
import { loadAccountData } from "./accountGuard";
2024-08-25 13:37:23 +02:00
import { isSetup } from "./setupGuard";
2024-09-01 19:19:48 +02:00
import { abilityAndNavUpdate } from "./adminGuard";
2024-09-17 16:44:02 +02:00
import type { PermissionType, PermissionSection, PermissionModule } from "@/types/permissionTypes";
2024-09-18 10:38:57 +02:00
import { resetMemberStores, setMemberId } from "./memberGuard";
2024-10-03 13:43:13 +02:00
import { resetProtocolStores, setProtocolId } from "./protocolGuard";
2024-12-26 13:57:45 +01:00
import { resetNewsletterStores, setNewsletterId } from "./newsletterGuard";
2025-01-11 14:45:48 +01:00
import { config } from "../config";
2024-08-22 11:48:04 +02:00
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: "/",
2024-08-23 14:42:32 +02:00
redirect: { name: "admin" },
},
{
path: "/login",
name: "login",
component: Login,
},
2024-08-25 13:37:23 +02:00
{
path: "/setup",
name: "setup",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-08-25 13:37:23 +02:00
beforeEnter: [isSetup],
children: [
{
path: "",
name: "setup-create",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/setup/Setup.vue"),
2024-08-25 13:37:23 +02:00
},
{
path: "verify",
name: "setup-verify",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/setup/Verify.vue"),
2024-08-25 13:37:23 +02:00
props: (route) => ({ mail: route.query.mail, token: route.query.token }),
},
],
},
2024-11-23 12:11:26 +01:00
{
2024-11-24 15:31:08 +01:00
path: "/reset",
name: "reset",
2024-11-23 12:11:26 +01:00
component: () => import("@/views/RouterView.vue"),
children: [
{
path: "",
2024-11-24 15:31:08 +01:00
name: "reset-start",
component: () => import("@/views/reset/Start.vue"),
2024-11-23 12:11:26 +01:00
},
{
2024-11-24 15:31:08 +01:00
path: "reset",
name: "reset-reset",
component: () => import("@/views/reset/Reset.vue"),
2024-11-23 14:25:41 +01:00
props: (route) => ({ mail: route.query.mail, token: route.query.token }),
},
],
},
{
path: "/invite",
name: "invite",
component: () => import("@/views/RouterView.vue"),
children: [
{
path: "verify",
name: "invite-verify",
component: () => import("@/views/invite/Verify.vue"),
2024-11-23 12:11:26 +01:00
props: (route) => ({ mail: route.query.mail, token: route.query.token }),
},
],
},
2024-08-23 14:42:32 +02:00
{
path: "/admin",
name: "admin",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/admin/View.vue"),
2024-08-23 14:42:32 +02:00
beforeEnter: [isAuthenticated],
2024-09-01 19:19:48 +02:00
children: [
{
path: "",
name: "admin-default",
component: () => import("@/views/admin/ViewSelect.vue"),
2024-09-01 19:19:48 +02:00
},
{
path: "club",
name: "admin-club",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-01 19:19:48 +02:00
meta: { type: "read", section: "club" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-club-default",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/admin/ViewSelect.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "club" },
beforeEnter: [abilityAndNavUpdate],
2024-09-01 19:19:48 +02:00
},
{
path: "members",
2024-09-17 16:44:02 +02:00
name: "admin-club-member-route",
component: () => import("@/views/RouterView.vue"),
2024-09-16 19:03:52 +02:00
meta: { type: "read", section: "club", module: "member" },
2024-09-02 15:57:03 +02:00
beforeEnter: [abilityAndNavUpdate],
2024-09-17 16:44:02 +02:00
children: [
{
path: "",
name: "admin-club-member",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/Member.vue"),
2024-09-18 10:38:57 +02:00
beforeEnter: [resetMemberStores],
2024-09-17 16:44:02 +02:00
},
{
path: ":memberId",
name: "admin-club-member-routing",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberRouting.vue"),
2024-09-17 16:44:02 +02:00
beforeEnter: [setMemberId],
props: true,
children: [
{
path: "overview",
name: "admin-club-member-overview",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberOverview.vue"),
2024-09-17 16:44:02 +02:00
props: true,
},
{
path: "membership",
name: "admin-club-member-membership",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/Membership.vue"),
2024-09-17 16:44:02 +02:00
props: true,
},
{
path: "communication",
name: "admin-club-member-communication",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberCommunication.vue"),
2024-09-17 16:44:02 +02:00
props: true,
},
{
path: "awards",
name: "admin-club-member-awards",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberAwards.vue"),
2024-09-17 16:44:02 +02:00
props: true,
},
{
path: "qualifications",
name: "admin-club-member-qualifications",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberQualifications.vue"),
2024-09-17 16:44:02 +02:00
props: true,
},
{
path: "positions",
name: "admin-club-member-positions",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberExecutivePositions.vue"),
2024-09-17 16:44:02 +02:00
props: true,
},
2024-09-26 13:16:31 +02:00
{
path: "edit",
name: "admin-club-member-edit",
2024-11-24 15:31:08 +01:00
component: () => import("@/views/admin/club/members/MemberEdit.vue"),
2024-09-26 13:16:31 +02:00
meta: { type: "update", section: "club", module: "member" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
2024-09-17 16:44:02 +02:00
],
},
],
2024-09-01 19:19:48 +02:00
},
{
path: "calendar",
name: "admin-club-calendar",
2024-10-06 12:02:39 +02:00
component: () => import("@/views/admin/club/calendar/Calendar.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "club", module: "calendar" },
beforeEnter: [abilityAndNavUpdate],
2024-09-01 19:19:48 +02:00
},
{
path: "newsletter",
2024-12-26 13:57:45 +01:00
name: "admin-club-newsletter-route",
component: () => import("@/views/RouterView.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "club", module: "newsletter" },
beforeEnter: [abilityAndNavUpdate],
2024-12-26 13:57:45 +01:00
children: [
{
path: "",
name: "admin-club-newsletter",
component: () => import("@/views/admin/club/newsletter/Newsletter.vue"),
beforeEnter: [resetNewsletterStores],
},
{
path: ":newsletterId",
name: "admin-club-newsletter-routing",
component: () => import("@/views/admin/club/newsletter/NewsletterRouting.vue"),
beforeEnter: [setNewsletterId],
props: true,
children: [
{
path: "overview",
name: "admin-club-newsletter-overview",
component: () => import("@/views/admin/club/newsletter/NewsletterOverview.vue"),
props: true,
},
2024-12-28 18:03:20 +01:00
{
path: "data",
name: "admin-club-newsletter-data",
component: () => import("@/views/admin/club/newsletter/NewsletterData.vue"),
props: true,
},
2024-12-26 13:57:45 +01:00
{
path: "recipients",
name: "admin-club-newsletter-recipients",
component: () => import("@/views/admin/club/newsletter/NewsletterRecipients.vue"),
props: true,
},
{
path: "dates",
name: "admin-club-newsletter-dates",
component: () => import("@/views/admin/club/newsletter/NewsletterDates.vue"),
props: true,
},
{
path: "printout",
name: "admin-club-newsletter-printout",
component: () => import("@/views/admin/club/newsletter/NewsletterPrintout.vue"),
props: true,
},
],
},
],
2024-09-01 19:19:48 +02:00
},
{
path: "protocol",
2024-10-03 13:43:13 +02:00
name: "admin-club-protocol-route",
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "club", module: "protocol" },
2024-09-02 15:57:03 +02:00
beforeEnter: [abilityAndNavUpdate],
2024-10-03 13:43:13 +02:00
children: [
{
path: "",
name: "admin-club-protocol",
2024-10-08 10:43:16 +02:00
component: () => import("@/views/admin/club/protocol/Protocol.vue"),
2024-10-03 13:43:13 +02:00
beforeEnter: [resetProtocolStores],
},
{
path: ":protocolId",
name: "admin-club-protocol-routing",
2024-10-08 10:43:16 +02:00
component: () => import("@/views/admin/club/protocol/ProtocolRouting.vue"),
2024-10-03 13:43:13 +02:00
beforeEnter: [setProtocolId],
props: true,
children: [
{
path: "overview",
name: "admin-club-protocol-overview",
2024-10-08 10:43:16 +02:00
component: () => import("@/views/admin/club/protocol/ProtocolOverview.vue"),
2024-10-03 13:43:13 +02:00
props: true,
},
{
2024-10-11 14:43:56 +02:00
path: "presence",
name: "admin-club-protocol-presence",
component: () => import("@/views/admin/club/protocol/ProtocolPresence.vue"),
2024-10-04 12:47:04 +02:00
props: true,
},
{
path: "voting",
name: "admin-club-protocol-voting",
2024-10-08 10:43:16 +02:00
component: () => import("@/views/admin/club/protocol/ProtocolVoting.vue"),
2024-10-04 12:47:04 +02:00
props: true,
},
{
path: "decisions",
name: "admin-club-protocol-decisions",
2024-10-08 10:43:16 +02:00
component: () => import("@/views/admin/club/protocol/ProtocolDecisions.vue"),
2024-10-04 12:47:04 +02:00
props: true,
},
{
2024-10-11 14:43:56 +02:00
path: "agenda",
name: "admin-club-protocol-agenda",
component: () => import("@/views/admin/club/protocol/ProtocolAgenda.vue"),
2024-10-03 13:43:13 +02:00
props: true,
},
2024-10-19 16:24:33 +02:00
{
path: "printout",
name: "admin-club-protocol-printout",
component: () => import("@/views/admin/club/protocol/ProtocolPrintout.vue"),
props: true,
},
2024-10-03 13:43:13 +02:00
],
},
],
2024-09-01 19:19:48 +02:00
},
2024-12-12 16:34:03 +01:00
{
path: "query-builder",
name: "admin-club-query_builder",
component: () => import("@/views/admin/club/query/Builder.vue"),
meta: { type: "read", section: "club", module: "query" },
beforeEnter: [abilityAndNavUpdate],
},
2024-09-01 19:19:48 +02:00
],
},
{
path: "settings",
name: "admin-settings",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-01 19:19:48 +02:00
meta: { type: "read", section: "settings" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-default",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/admin/ViewSelect.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "settings" },
beforeEnter: [abilityAndNavUpdate],
2024-09-01 19:19:48 +02:00
},
{
path: "qualification",
2024-09-09 13:13:45 +02:00
name: "admin-settings-qualification-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "settings", module: "qualification" },
beforeEnter: [abilityAndNavUpdate],
2024-09-09 13:13:45 +02:00
children: [
{
path: "",
name: "admin-settings-qualification",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/qualification/Qualification.vue"),
2024-09-09 13:13:45 +02:00
},
{
path: ":id/edit",
name: "admin-settings-qualification-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/qualification/QualificationEdit.vue"),
2024-09-09 13:13:45 +02:00
meta: { type: "update", section: "settings", module: "qualification" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
2024-09-01 19:19:48 +02:00
},
{
path: "award",
2024-09-09 13:13:45 +02:00
name: "admin-settings-award-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "settings", module: "award" },
beforeEnter: [abilityAndNavUpdate],
2024-09-09 13:13:45 +02:00
children: [
{
path: "",
name: "admin-settings-award",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/award/Award.vue"),
2024-09-09 13:13:45 +02:00
},
{
path: ":id/edit",
name: "admin-settings-award-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/award/AwardEdit.vue"),
2024-09-09 13:13:45 +02:00
meta: { type: "update", section: "settings", module: "award" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
2024-09-01 19:19:48 +02:00
},
2024-09-09 13:13:45 +02:00
{
path: "executive-position",
name: "admin-settings-executive_position-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-09 13:13:45 +02:00
meta: { type: "read", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-executive_position",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/executivePosition/ExecutivePosition.vue"),
2024-10-27 15:51:15 +01:00
meta: { type: "read", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate],
2024-09-09 13:13:45 +02:00
},
{
path: ":id/edit",
name: "admin-settings-executive_position-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/executivePosition/ExecutivePositionEdit.vue"),
2024-09-09 13:13:45 +02:00
meta: { type: "update", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
},
2024-09-01 19:19:48 +02:00
{
2024-12-12 16:34:03 +01:00
path: "communication-type",
name: "admin-settings-communication_type-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-12-12 16:34:03 +01:00
meta: { type: "read", section: "settings", module: "communication_type" },
2024-09-02 15:57:03 +02:00
beforeEnter: [abilityAndNavUpdate],
2024-09-09 13:13:45 +02:00
children: [
{
path: "",
2024-12-12 16:34:03 +01:00
name: "admin-settings-communication_type",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/communicationType/CommunicationType.vue"),
2024-09-09 13:13:45 +02:00
},
{
path: ":id/edit",
2024-12-12 16:34:03 +01:00
name: "admin-settings-communication_type-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/communicationType/CommunicationTypeEdit.vue"),
2024-12-12 16:34:03 +01:00
meta: { type: "update", section: "settings", module: "communication_type" },
2024-09-09 13:13:45 +02:00
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
},
{
path: "status",
name: "admin-settings-membership_status-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-09 13:13:45 +02:00
meta: { type: "read", section: "settings", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-membership_status",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/membershipStatus/MembershipStatus.vue"),
2024-09-09 13:13:45 +02:00
},
{
path: ":id/edit",
name: "admin-settings-membership_status-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/membershipStatus/MembershipStatusEdit.vue"),
2024-09-09 13:13:45 +02:00
meta: { type: "update", section: "settings", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
2024-10-27 15:51:15 +01:00
],
},
2025-01-25 12:16:05 +01:00
{
path: "salutation",
name: "admin-settings-salutation-route",
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "salutation" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-salutation",
component: () => import("@/views/admin/settings/salutation/Salutation.vue"),
},
{
path: ":id/edit",
name: "admin-settings-salutation-edit",
component: () => import("@/views/admin/settings/salutation/SalutationEdit.vue"),
meta: { type: "update", section: "settings", module: "salutation" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
},
2024-10-27 15:51:15 +01:00
{
path: "calendar-type",
name: "admin-settings-calendar_type-route",
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "calendar_type" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-calendar_type",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/calendarType/CalendarType.vue"),
2024-10-27 15:51:15 +01:00
},
{
path: ":id/edit",
name: "admin-settings-calendar_type-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/calendarType/CalendarTypeEdit.vue"),
2024-10-27 15:51:15 +01:00
meta: { type: "update", section: "settings", module: "calendar_type" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
2024-09-09 13:13:45 +02:00
],
2024-09-01 19:19:48 +02:00
},
2024-12-12 16:34:03 +01:00
{
path: "query-store",
2024-12-18 22:27:44 +01:00
name: "admin-settings-query_store",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/settings/queryStore/QueryStore.vue"),
2024-12-18 22:27:44 +01:00
meta: { type: "read", section: "settings", module: "query_store" },
2024-12-12 16:34:03 +01:00
beforeEnter: [abilityAndNavUpdate],
},
2024-12-21 16:01:18 +01:00
{
path: "template",
name: "admin-settings-template-route",
component: () => import("@/views/RouterView.vue"),
2024-12-22 10:29:31 +01:00
meta: { type: "read", section: "settings", module: "template" },
2024-12-21 16:01:18 +01:00
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-template",
component: () => import("@/views/admin/settings/template/Template.vue"),
},
2024-12-22 10:29:31 +01:00
{
path: "info",
name: "admin-settings-template-info",
component: () => import("@/views/admin/settings/template/UsageInfo.vue"),
props: true,
},
2024-12-21 16:01:18 +01:00
{
path: ":id/edit",
name: "admin-settings-template-edit",
2024-12-22 10:29:31 +01:00
component: () => import("@/views/admin/settings/template/TemplateEdit.vue"),
meta: { type: "update", section: "settings", module: "template" },
beforeEnter: [abilityAndNavUpdate],
2024-12-21 16:01:18 +01:00
props: true,
},
],
},
2024-12-23 14:00:32 +01:00
{
path: "template-usage",
name: "admin-settings-template_usage",
component: () => import("@/views/admin/settings/templateUsage/TemplateUsage.vue"),
meta: { type: "read", section: "settings", module: "template_usage" },
beforeEnter: [abilityAndNavUpdate],
},
2024-12-25 12:22:10 +01:00
{
path: "newsletter-config",
name: "admin-settings-newsletter_config",
2024-12-26 12:04:00 +01:00
component: () => import("@/views/admin/settings/newsletterConfig/NewsletterConfig.vue"),
2024-12-25 12:22:10 +01:00
meta: { type: "read", section: "settings", module: "newsletter_config" },
beforeEnter: [abilityAndNavUpdate],
},
2024-09-01 19:19:48 +02:00
],
},
{
path: "user",
name: "admin-user",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-01 19:19:48 +02:00
meta: { type: "read", section: "user" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-user-default",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/admin/ViewSelect.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "user" },
beforeEnter: [abilityAndNavUpdate],
2024-09-01 19:19:48 +02:00
},
{
path: "user",
2024-09-02 15:57:03 +02:00
name: "admin-user-user-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-user-user",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/user/User.vue"),
2024-09-02 15:57:03 +02:00
},
2024-11-23 14:25:41 +01:00
{
path: "invites",
name: "admin-user-user-invites",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/user/Invite.vue"),
2024-11-23 14:25:41 +01:00
},
2024-09-02 15:57:03 +02:00
{
path: ":id/edit",
name: "admin-user-user-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/user/UserEdit.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
{
path: ":id/permission",
name: "admin-user-user-permission",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/user/UserEditPermission.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
{
path: ":id/roles",
name: "admin-user-user-roles",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/user/UserEditRoles.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
2024-09-01 19:19:48 +02:00
},
{
path: "role",
2024-09-02 15:57:03 +02:00
name: "admin-user-role-route",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/RouterView.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "read", section: "user", module: "role" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-user-role",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/role/Role.vue"),
2024-09-02 15:57:03 +02:00
},
{
path: ":id/edit",
name: "admin-user-role-edit",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/role/RoleEdit.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "update", section: "user", module: "role" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
{
path: ":id/permission",
name: "admin-user-role-permission",
2025-01-02 18:28:13 +01:00
component: () => import("@/views/admin/user/role/RoleEditPermission.vue"),
2024-09-02 15:57:03 +02:00
meta: { type: "update", section: "user", module: "role" },
2025-01-22 10:17:11 +01:00
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
},
{
path: "webapi",
name: "admin-user-webapi-route",
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "user", module: "webapi" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-user-webapi",
component: () => import("@/views/admin/user/webapi/Webapi.vue"),
},
{
path: ":id/edit",
name: "admin-user-webapi-edit",
component: () => import("@/views/admin/user/webapi/WebapiEdit.vue"),
meta: { type: "update", section: "user", module: "webapi" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
{
path: ":id/permission",
name: "admin-user-webapi-permission",
component: () => import("@/views/admin/user/webapi/WebapiEditPermission.vue"),
meta: { type: "update", section: "user", module: "webapi" },
2024-09-02 15:57:03 +02:00
beforeEnter: [abilityAndNavUpdate],
props: true,
},
],
2024-09-01 19:19:48 +02:00
},
2025-02-02 16:37:46 +01:00
{
path: "backup",
name: "admin-user-backup",
component: () => import("@/views/admin/user/backup/Backup.vue"),
meta: { type: "read", section: "user", module: "backup" },
beforeEnter: [abilityAndNavUpdate],
},
2024-09-01 19:19:48 +02:00
],
},
{
path: ":pathMatch(.*)*",
name: "admin-404",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/notFound.vue"),
2024-09-01 19:19:48 +02:00
},
],
2024-08-23 14:42:32 +02:00
},
2024-11-16 12:19:13 +01:00
{
path: "/account",
name: "account",
component: () => import("@/views/account/View.vue"),
beforeEnter: [isAuthenticated],
children: [
{
path: "",
name: "account-default",
2024-11-20 09:32:52 +01:00
component: () => import("@/views/account/ViewSelect.vue"),
},
{
path: "me",
name: "account-me",
2024-11-20 10:02:25 +01:00
component: () => import("@/views/account/Me.vue"),
2024-11-20 09:32:52 +01:00
},
{
path: "logindata",
name: "account-logindata",
component: () => import("@/views/account/LoginData.vue"),
2024-11-16 12:19:13 +01:00
},
2024-11-20 10:13:10 +01:00
{
path: "permission",
name: "account-permission",
component: () => import("@/views/account/Permission.vue"),
},
2024-11-21 15:58:58 +01:00
{
path: "administration",
name: "account-administration",
component: () => import("@/views/account/Administration.vue"),
},
2025-01-23 11:22:15 +01:00
{
path: "version",
name: "account-version",
component: () => import("@/views/account/VersionDisplay.vue"),
},
2024-11-16 12:19:13 +01:00
{
path: ":pathMatch(.*)*",
name: "account-404",
component: () => import("@/views/notFound.vue"),
},
],
},
{
path: "/public",
name: "public",
component: () => import("@/views/public/View.vue"),
children: [
{
path: "",
name: "public-default",
component: () => import("@/views/notFound.vue"),
},
{
path: "calendar",
name: "public-calendar",
component: () => import("@/views/public/calendar/Calendar.vue"),
},
2024-12-05 16:37:10 +01:00
{
path: "calendar-explain",
name: "public-calendar-explain",
component: () => import("@/views/public/calendar/CalendarExplain.vue"),
},
],
},
2025-01-03 16:27:39 +01:00
{
path: "/docs",
name: "docs",
component: () => import("@/views/docs/View.vue"),
2025-01-04 19:18:14 +01:00
beforeEnter: [isAuthenticated],
2025-01-03 16:27:39 +01:00
props: true,
children: [
{
path: "",
name: "docs-default",
component: () => import("@/views/docs/ViewSelect.vue"),
},
{
path: ":page",
name: "docs-page",
component: () => import("@/views/docs/DocPage.vue"),
props: true,
},
],
},
{
path: "/nopermissions",
name: "nopermissions",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/NoPermission.vue"),
},
2024-08-23 14:42:32 +02:00
{
path: "/:pathMatch(.*)*",
name: "404",
2024-09-17 16:44:02 +02:00
component: () => import("@/views/notFound.vue"),
2024-08-22 11:48:04 +02:00
},
],
});
2025-01-11 14:45:48 +01:00
router.afterEach((to, from) => {
document.title = config.app_name_overwrite || "FF Admin";
});
2024-08-22 11:48:04 +02:00
export default router;
2024-09-01 19:19:48 +02:00
declare module "vue-router" {
interface RouteMeta {
type?: PermissionType | "admin";
section?: PermissionSection;
module?: PermissionModule;
}
}