member data reads and display

This commit is contained in:
Julian Krauser 2024-09-17 16:44:02 +02:00
parent c1a6c0040d
commit 5eeea631c0
57 changed files with 1149 additions and 110 deletions

View file

@ -1,6 +1,6 @@
import NProgress from "nprogress";
import { useAbilityStore } from "../stores/ability";
import { useNavigationStore } from "../stores/admin/navigation";
import { useAbilityStore } from "@/stores/ability";
import { useNavigationStore } from "@/stores/admin/navigation";
export async function abilityAndNavUpdate(to: any, from: any, next: any) {
NProgress.start();

View file

@ -2,9 +2,9 @@ import NProgress from "nprogress";
import { useAuthStore } from "@/stores/auth";
import { useAccountStore } from "@/stores/account";
import { jwtDecode, type JwtPayload } from "jwt-decode";
import { refreshToken } from "../serverCom";
import type { PermissionObject } from "../types/permissionTypes";
import { useAbilityStore } from "../stores/ability";
import { refreshToken } from "@/serverCom";
import type { PermissionObject } from "@/types/permissionTypes";
import { useAbilityStore } from "@/stores/ability";
export type Payload = JwtPayload & {
userId: number;

View file

@ -1,11 +1,12 @@
import { createRouter, createWebHistory, createWebHashHistory } from "vue-router";
import Login from "../views/Login.vue";
import Login from "@/views/Login.vue";
import { isAuthenticated } from "./authGuards";
import { loadAccountData } from "./accountGuard";
import { isSetup } from "./setupGuard";
import { abilityAndNavUpdate } from "./adminGuard";
import type { PermissionType, PermissionSection, PermissionModule } from "../types/permissionTypes";
import type { PermissionType, PermissionSection, PermissionModule } from "@/types/permissionTypes";
import { setMemberId } from "./memberGuard";
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
@ -22,18 +23,18 @@ const router = createRouter({
{
path: "/setup",
name: "setup",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
beforeEnter: [isSetup],
children: [
{
path: "",
name: "setup-create",
component: () => import("../views/setup/Setup.vue"),
component: () => import("@/views/setup/Setup.vue"),
},
{
path: "verify",
name: "setup-verify",
component: () => import("../views/setup/Verify.vue"),
component: () => import("@/views/setup/Verify.vue"),
props: (route) => ({ mail: route.query.mail, token: route.query.token }),
},
],
@ -41,53 +42,113 @@ const router = createRouter({
{
path: "/admin",
name: "admin",
component: () => import("../views/admin/View.vue"),
component: () => import("@/views/admin/View.vue"),
beforeEnter: [isAuthenticated],
children: [
{
path: "",
name: "admin-default",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
},
{
path: "club",
name: "admin-club",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "club" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-club-default",
component: () => import("../views/admin/ViewSelect.vue"),
component: () => import("@/views/admin/ViewSelect.vue"),
meta: { type: "read", section: "club" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "members",
name: "admin-club-member",
component: () => import("../views/admin/members/Member.vue"),
name: "admin-club-member-route",
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "club", module: "member" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-club-member",
component: () => import("@/views/admin/members/Member.vue"),
},
{
path: ":id/edit",
name: "admin-club-member-edit",
component: () => import("@/views/admin/members/MemberEdit.vue"),
meta: { type: "update", section: "club", module: "member" },
beforeEnter: [abilityAndNavUpdate],
props: true,
},
{
path: ":memberId",
name: "admin-club-member-routing",
component: () => import("@/views/admin/members/MemberRouting.vue"),
beforeEnter: [setMemberId],
props: true,
children: [
{
path: "overview",
name: "admin-club-member-overview",
component: () => import("@/views/admin/members/MemberOverview.vue"),
props: true,
},
{
path: "membership",
name: "admin-club-member-membership",
component: () => import("@/views/admin/members/Membership.vue"),
props: true,
},
{
path: "communication",
name: "admin-club-member-communication",
component: () => import("@/views/admin/members/MemberCommunication.vue"),
props: true,
},
{
path: "awards",
name: "admin-club-member-awards",
component: () => import("@/views/admin/members/MemberAwards.vue"),
props: true,
},
{
path: "qualifications",
name: "admin-club-member-qualifications",
component: () => import("@/views/admin/members/MemberQualifications.vue"),
props: true,
},
{
path: "positions",
name: "admin-club-member-positions",
component: () => import("@/views/admin/members/MemberExecutivePositions.vue"),
props: true,
},
],
},
],
},
{
path: "calendar",
name: "admin-club-calendar",
component: () => import("../views/admin/members/Overview.vue"),
component: () => import("@/views/admin/members/Overview.vue"),
meta: { type: "read", section: "club", module: "calendar" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "newsletter",
name: "admin-club-newsletter",
component: () => import("../views/admin/members/Overview.vue"),
component: () => import("@/views/admin/members/Overview.vue"),
meta: { type: "read", section: "club", module: "newsletter" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "protocol",
name: "admin-club-protocol",
component: () => import("../views/admin/members/Overview.vue"),
component: () => import("@/views/admin/members/Overview.vue"),
meta: { type: "read", section: "club", module: "protocoll" },
beforeEnter: [abilityAndNavUpdate],
},
@ -96,33 +157,33 @@ const router = createRouter({
{
path: "settings",
name: "admin-settings",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-default",
component: () => import("../views/admin/ViewSelect.vue"),
component: () => import("@/views/admin/ViewSelect.vue"),
meta: { type: "read", section: "settings" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "qualification",
name: "admin-settings-qualification-route",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "qualification" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-qualification",
component: () => import("../views/admin/settings/Qualification.vue"),
component: () => import("@/views/admin/settings/Qualification.vue"),
},
{
path: ":id/edit",
name: "admin-settings-qualification-edit",
component: () => import("../views/admin/settings/QualificationEdit.vue"),
component: () => import("@/views/admin/settings/QualificationEdit.vue"),
meta: { type: "update", section: "settings", module: "qualification" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -132,19 +193,19 @@ const router = createRouter({
{
path: "award",
name: "admin-settings-award-route",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "award" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-award",
component: () => import("../views/admin/settings/Award.vue"),
component: () => import("@/views/admin/settings/Award.vue"),
},
{
path: ":id/edit",
name: "admin-settings-award-edit",
component: () => import("../views/admin/settings/AwardEdit.vue"),
component: () => import("@/views/admin/settings/AwardEdit.vue"),
meta: { type: "update", section: "settings", module: "award" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -154,26 +215,26 @@ const router = createRouter({
{
path: "executive-position",
name: "admin-settings-executive_position",
component: () => import("../views/admin/settings/ExecutivePosition.vue"),
component: () => import("@/views/admin/settings/ExecutivePosition.vue"),
meta: { type: "read", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "executive-position",
name: "admin-settings-executive_position-route",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-executive_position",
component: () => import("../views/admin/settings/ExecutivePosition.vue"),
component: () => import("@/views/admin/settings/ExecutivePosition.vue"),
},
{
path: ":id/edit",
name: "admin-settings-executive_position-edit",
component: () => import("../views/admin/settings/ExecutivePositionEdit.vue"),
component: () => import("@/views/admin/settings/ExecutivePositionEdit.vue"),
meta: { type: "update", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -183,19 +244,19 @@ const router = createRouter({
{
path: "communication",
name: "admin-settings-communication-route",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "communication" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-communication",
component: () => import("../views/admin/settings/CommunicationType.vue"),
component: () => import("@/views/admin/settings/CommunicationType.vue"),
},
{
path: ":id/edit",
name: "admin-settings-communication-edit",
component: () => import("../views/admin/settings/CommunicationTypeEdit.vue"),
component: () => import("@/views/admin/settings/CommunicationTypeEdit.vue"),
meta: { type: "update", section: "settings", module: "communication" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -205,19 +266,19 @@ const router = createRouter({
{
path: "status",
name: "admin-settings-membership_status-route",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "settings", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-settings-membership_status",
component: () => import("../views/admin/settings/MembershipStatus.vue"),
component: () => import("@/views/admin/settings/MembershipStatus.vue"),
},
{
path: ":id/edit",
name: "admin-settings-membership_status-edit",
component: () => import("../views/admin/settings/MembershipStatusEdit.vue"),
component: () => import("@/views/admin/settings/MembershipStatusEdit.vue"),
meta: { type: "update", section: "settings", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -229,33 +290,33 @@ const router = createRouter({
{
path: "user",
name: "admin-user",
component: () => import("../views/RouterView.vue"),
component: () => import("@/views/RouterView.vue"),
meta: { type: "read", section: "user" },
beforeEnter: [abilityAndNavUpdate],
children: [
{
path: "",
name: "admin-user-default",
component: () => import("../views/admin/ViewSelect.vue"),
component: () => import("@/views/admin/ViewSelect.vue"),
meta: { type: "read", section: "user" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "user",
name: "admin-user-user-route",
component: () => import("../views/RouterView.vue"),
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"),
component: () => import("@/views/admin/user/User.vue"),
},
{
path: ":id/edit",
name: "admin-user-user-edit",
component: () => import("../views/admin/user/UserEdit.vue"),
component: () => import("@/views/admin/user/UserEdit.vue"),
meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -263,7 +324,7 @@ const router = createRouter({
{
path: ":id/permission",
name: "admin-user-user-permission",
component: () => import("../views/admin/user/UserEditPermission.vue"),
component: () => import("@/views/admin/user/UserEditPermission.vue"),
meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -271,7 +332,7 @@ const router = createRouter({
{
path: ":id/roles",
name: "admin-user-user-roles",
component: () => import("../views/admin/user/UserEditRoles.vue"),
component: () => import("@/views/admin/user/UserEditRoles.vue"),
meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -281,19 +342,19 @@ const router = createRouter({
{
path: "role",
name: "admin-user-role-route",
component: () => import("../views/RouterView.vue"),
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"),
component: () => import("@/views/admin/user/Role.vue"),
},
{
path: ":id/edit",
name: "admin-user-role-edit",
component: () => import("../views/admin/user/RoleEdit.vue"),
component: () => import("@/views/admin/user/RoleEdit.vue"),
meta: { type: "update", section: "user", module: "role" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -301,7 +362,7 @@ const router = createRouter({
{
path: ":id/permission",
name: "admin-user-role-permission",
component: () => import("../views/admin/user/RoleEditPermission.vue"),
component: () => import("@/views/admin/user/RoleEditPermission.vue"),
meta: { type: "update", section: "user", module: "role" },
beforeEnter: [abilityAndNavUpdate],
props: true,
@ -313,19 +374,19 @@ const router = createRouter({
{
path: ":pathMatch(.*)*",
name: "admin-404",
component: () => import("../views/notFound.vue"),
component: () => import("@/views/notFound.vue"),
},
],
},
{
path: "/nopermissions",
name: "nopermissions",
component: () => import("../views/NoPermission.vue"),
component: () => import("@/views/NoPermission.vue"),
},
{
path: "/:pathMatch(.*)*",
name: "404",
component: () => import("../views/notFound.vue"),
component: () => import("@/views/notFound.vue"),
},
],
});

19
src/router/memberGuard.ts Normal file
View file

@ -0,0 +1,19 @@
import { useCommunicationStore } from "@/stores/admin/communication";
import { useMemberStore } from "@/stores/admin/member";
import { useMemberAwardStore } from "@/stores/admin/memberAward";
import { useMemberExecutivePositionStore } from "@/stores/admin/memberExecutivePosition";
import { useMemberQualificationStore } from "@/stores/admin/memberQualification";
import { useMembershipStore } from "@/stores/admin/membership";
export async function setMemberId(to: any, from: any, next: any) {
const member = useMemberStore();
member.activeMember = to.params?.memberId ?? null;
useMembershipStore().$reset();
useCommunicationStore().$reset();
useMemberAwardStore().$reset();
useMemberExecutivePositionStore().$reset();
useMemberQualificationStore().$reset();
next();
}

View file

@ -1,5 +1,5 @@
import NProgress from "nprogress";
import { http } from "../serverCom";
import { http } from "@/serverCom";
export async function isSetup(to: any, from: any, next: any) {
NProgress.start();